通知启动错误的活动

时间:2014-03-05 12:04:03

标签: android android-activity android-notifications

我的问题是:点击通知消息会启动正在运行的活动,而不是预期的活动(我的代码中的BatchActivity); (否则就是,如果mainactivity正在运行,它会返回到那个,否则android的主屏幕会启动。它似乎只是消失了状态屏幕)

以前工作正常,直到我使用相同的通知ID打开之前的通知,从那时起BatchActivity没有启动。在调试模式下,永远不会到达onCreate中的第一行。

我在索尼Xperia Android设备4.3上测试了它,针对目标19进行了测试。 我的代码: ...

   if (qty>0) {
    Intent intent = new Intent(context, BatchActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0);
notification  = new NotificationCompat.Builder(context)
        .setContentTitle(passing[0].get(6))
    .setContentText("Subject")
    .setTicker("hihi ho haha")
    .setNumber(qty)
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentIntent(pIntent)
    .setAutoCancel(true)
    .addAction(R.drawable.ic_launcher, "And more", pIntent).build();  
    notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID, notification); 
} else {
    notificationManager.cancel(NOTIFICATION_ID);
}

...

通知正在更新先前的通知。

提前完成!我被困了

1 个答案:

答案 0 :(得分:1)

这是因为系统并不假设只是因为我们将新的Intent对象传递给挂起的intent,我们希望传递这个新的intent对象并保持旧的(初始)挂起的intent。

要获得所需的语义,我们需要传递一个标志来告诉系统:

PendingIntent pintent = 
   PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);

此标志(FLAG_CANCEL_CURRENT)告诉系统旧的待处理意图不再有效,它应取消(=删除)它,然后为我们创建一个新的意图。还有更多可能的标志,这些标志在PendingIntent的javadoc页面上描述。

Heiko Rupp

解决方案