我的问题是:点击通知消息会启动正在运行的活动,而不是预期的活动(我的代码中的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);
}
...
通知正在更新先前的通知。
提前完成!我被困了
答案 0 :(得分:1)
这是因为系统并不假设只是因为我们将新的Intent对象传递给挂起的intent,我们希望传递这个新的intent对象并保持旧的(初始)挂起的intent。
要获得所需的语义,我们需要传递一个标志来告诉系统:
PendingIntent pintent =
PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
此标志(FLAG_CANCEL_CURRENT)告诉系统旧的待处理意图不再有效,它应取消(=删除)它,然后为我们创建一个新的意图。还有更多可能的标志,这些标志在PendingIntent的javadoc页面上描述。
解决方案