我创建了一个活动,可以向状态栏发送大量通知。每个通知都包含一个包含的意图。这是代码:
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
int icon = R.drawable.icon;
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, "Test Notification", when);
Context context = getApplicationContext();
Bundle bundle = new Bundle();
bundle.putString("action", "view");
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.putExtras(bundle);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
mNotificationManager.notify(1, notification);
当用户点击此通知时,我会读取捆绑字符串“action”并执行该操作。这是代码:
Bundle bundle = this.getIntent().getExtras();
if(bundle != null)
{
String action = bundle.getString("action");
performAction(action)
}
一切都按预期工作。但是,当我使用设备上的“箭头”按钮最小化应用程序,然后按住主页按钮并单击我的应用程序图标时,应用程序启动并执行通过单击最后一个通知执行的相同操作。我发现当我们点击应用程序图标时,应用程序会以通知触发的最后一个意图开始。任何人都可以帮助吗?
答案 0 :(得分:4)
首先,“向状态栏发送大量通知的活动”对于生产应用程序来说是一个糟糕的设计。 Activity
已在用户面前拥有用户界面,因此不需要Notifications
。即使您是从Service
执行此操作,浩大的大多数Android应用程序一次也不需要多个Notification
。
针对您的具体问题,您认为自己创建了多个PendingIntents
,但事实并非如此。默认情况下,仅当基础PendingIntent
与另一个未列出的Intent
使用的Intent
存在重大差异时,才会创建不同的PendingIntent
。你的只是额外的不同。如果您要有多个未完成的PendingIntents
,则需要将它们放在不同的Intents
上,其中Intents
因组件,操作,数据(Uri)或类别而异。
答案 1 :(得分:0)
我自己找到了解决方案:
Intent intent = getIntent();
int flags = intent.getFlags();
boolean launchedFromHistory = ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0);
通过这种方式,我们可以查看活动的起点。