Set different activities for pending intent of not

2019-08-02 09:40发布

问题:

I am currently facing the problem of setting pending action for two different activities to notification.

I have a ParentActivity and a ChildActivity. I want open ChildActivity on notification click if currently it is running or paused, otherwise start ParentActivity.

I tried this :

 .........

    Intent resultIntent = new Intent(this, ChildActivity.class);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(ParentActivity.class);
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent resultPendingIntent =
            stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    .............

Above is not working for me. Everytime ChildActivity is starting on notification click.

And also as Faruk answered, I dont want this. Creating a notification's pending intent by checking ChildActivity's current state will not work. Suppose notification created when ChildActivity was running but after creating the notification, user killed the app. So after killing the app, If user will click on notification then ChildActivity will start. I don't want that. I want if ChildActivity is not running or paused then ParentActivity should be started.

How can I achieve this? Please help.

回答1:

Have your Notification launch a simple dispatch Activity. This Activity does the following in onCreate():

super.onCreate(...);
if (ChildActivity.running) {
    // ChildActivity is running, so redirect to it
    Intent childIntent = new Intent(this, ChildActivity.class);
    // Add necessary flags, maybe FLAG_ACTIVITY_CLEAR_TOP, it depends what the rest of your app looks like
    childIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(childIntent);
} else {
    // Child is not running, so redirect to parent
    Intent parentIntent = new Intent(this, ParentIntent.class);
    // Add necessary flags, maybe FLAG_ACTIVITY_CLEAR_TOP, it depends what the rest of your app looks like
    parentIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(parentIntent);
}
finish();

In ChildActivity do this:

public static boolean running; // Set when this Activity is active

In ChildActivity.onCreate() add this:

running = true;

In ChildActivity.onDestroy() add this:

running = false;


回答2:

While there may be several ways to achieve this, following is the one I can think of.

First, you should get whether ChildActivity is active or not, through this link

Check whether activity is active

Store this in some variable childActive, then you can initialize different notificationIntents checking the value without using task TaskStackBuilder.

For example;

Intent notificationIntent = null;
if(childActive)
    notificationIntent = new Intent(context, ChildActivity.class);
else
    notificationIntent = new Intent(context, ParentActivity.class);

PendingIntent contentIntent = PendingIntent.getActivity(context,
                0, notificationIntent,
                PendingIntent.FLAG_CANCEL_CURRENT);