【问题标题】:Set different activities for pending intent of notification为未决的通知意图设置不同的活动
【发布时间】:2016-12-06 13:16:00
【问题描述】:

我目前面临将两个不同活动的待处理操作设置为通知的问题。

我有一个 ParentActivity 和一个 ChildActivity。如果当前正在运行或暂停,我想在通知单击时打开 ChildActivity,否则启动 ParentActivity。

我试过这个:

 .........

    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);
    .............

以上对我不起作用。每次 ChildActivity 在通知点击时开始。

正如 Faruk 回答的那样,我不想要这个。通过检查 ChildActivity 的当前状态来创建通知的待处理意图将不起作用。 假设在 ChildActivity 运行时创建了通知,但在创建通知后,用户终止了应用程序。因此,在杀死应用程序后,如果用户单击通知,则 ChildActivity 将启动。我不想要那个。我想如果 ChildActivity 没有运行或暂停,那么 ParentActivity 应该启动。

我怎样才能做到这一点? 请帮忙。

【问题讨论】:

  • 请发布您的代码..@Sar
  • 试试这个:- PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(contex,0,resultIntent ,PendingIntent.FLAG_UPDATE_CURRENT);

标签: android android-activity notifications android-pendingintent


【解决方案1】:

虽然可能有几种方法可以实现这一点,但我能想到的方法如下。

首先,您应该通过此链接了解 ChildActivity 是否处于活动状态

Check whether activity is active

将此存储在某个变量 childActive 中,然后您可以初始化不同的 notificationIntents 检查值,而无需使用任务 TaskStackBuilder。

例如;

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);

【讨论】:

  • 感谢您的回复法鲁克。但是这种方式存在问题。假设在 ChildActivity 运行时创建了通知,但在创建通知后,用户终止了应用程序。因此,在杀死应用程序后,如果用户单击通知,则 ChildActivity 将启动。我不想要那个。我想如果 ChildActivity 没有运行或暂停,那么应该启动 PARentActivity。
【解决方案2】:

让您的Notification 启动一个简单的调度Activity。这个ActivityonCreate() 中执行以下操作:

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();

ChildActivity 中这样做:

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

ChildActivity.onCreate() 中添加:

running = true;

ChildActivity.onDestroy() 中添加:

running = false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    相关资源
    最近更新 更多