Android - 单击状态栏中的通知会将意图与目标活动绑定

时间:2010-03-25 10:38:13

标签: android

我创建了一个活动,可以向状态栏发送大量通知。每个通知都包含一个包含的意图。这是代码:

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

一切都按预期工作。但是,当我使用设备上的“箭头”按钮最小化应用程序,然后按住主页按钮并单击我的应用程序图标时,应用程序启动并执行通过单击最后一个通知执行的相同操作。我发现当我们点击应用程序图标时,应用程序会以通知触发的最后一个意图开始。任何人都可以帮助吗?

2 个答案:

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

通过这种方式,我们可以查看活动的起点。