janlan
janlan

Reputation: 477

Wrong Activity is getting openned on clicking Notification

After clicking on notification, wrong Activity is being oppended - main application activity, but not my goal Activity - NearPhotoActivity.

creating Notification:

    public static Notification createNotification(Location location) {
        NotificationChannel mChannel = new NotificationChannel(
                "3000", "notification_channel", NotificationManager.IMPORTANCE_LOW);
        notificationManager.createNotificationChannel(mChannel);
        return buildNotification("Notification Title",
                "Notification Body",
                true,
                R.drawable.ic_mr_button_connecting_00_dark,
                createPendingIntent(NearPhotoActivity.class, location),
                mChannel);
    }

creating PendingIntent:

    private static PendingIntent createPendingIntent(Class destinationActivityClass, Location location) {
        Intent intent = new Intent(MyApplication.getAppContext(),
                destinationActivityClass);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra("nearLocation", location);
        return PendingIntent
                .getActivity(MyApplication.getAppContext(),
                        0,
                        intent,
                        PendingIntent.FLAG_CANCEL_CURRENT);
    }

Activity that should be openned:

@RequiresApi(api = Build.VERSION_CODES.O)
public class NearPhotoActivity extends AppCompatActivity {
    private ImageView nearPhotoImageView;
    private TextView locationDescriptionTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_near_photo);

        onNewIntent(getIntent());


        nearPhotoImageView = findViewById(R.id.nearPhotoImageView);

        locationDescriptionTextView = findViewById(R.id.locationDescriptionTextView);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        if(intent.getExtras().containsKey("nearLocation")) {
            Location location = (Location) intent.getExtras().getSerializable("nearLocation");
            //Address address = MyAppUtils.getLocation(location.getLatitude(),location.getLongitude());
            locationDescriptionTextView.setText("You are " + location.distanceTo(MyApplication.getCurrentLocation()) + " meters");
        }
    }
}

Upvotes: 0

Views: 48

Answers (1)

John Joe
John Joe

Reputation: 12803

Wrong activity is opened because you have set MainActivity as default in Mainfest when app is launched.

You should add onNewIntent function in MainActivity, but not in NearPhotoActivity.

MainActivity

override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    receiveIntent(intent)
}

fun receiveIntent(intent: Intent?) {
   Location location = (Location) intent.getExtras().getSerializable("nearLocation");
   Intent i = newIntent(MainActivity.this,NearPhotoActivity.class)
   i.putExtra("location",location)
   startActivity(i)
}

Then use getExtra to get the location in NearPhotoActivity class.

Upvotes: 1

Related Questions