得到通知意图额外

时间:2014-12-02 17:12:41

标签: android android-intent notifications

我的通知显示方法:

public static void ShowNotification(int id, String NotifFirstText,
        String NotifTitle, String NotifeText, int notificon, long when) {

    try {
        Context context = ApplicationClass.context;
        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(context.NOTIFICATION_SERVICE);

        int icon = notificon;
        CharSequence notiText = NotifFirstText;
        long meow = when;

        Notification notification = new Notification(icon, notiText, meow);
        CharSequence contentTitle = NotifTitle;
        CharSequence contentText = NotifeText;
        Intent notificationIntent = new Intent();
        String mPackage = "mypackage";
        String mClass = ".ActivityShow";
        notificationIntent.setComponent(new ComponentName(mPackage,
                mPackage + mClass));
        notificationIntent.putExtra("id", id);

        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);

        notification.flags = Notification.DEFAULT_LIGHTS
                | Notification.FLAG_AUTO_CANCEL
                | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND;

        PendingIntent contentIntent = PendingIntent.getActivity(G.context,
                0, notificationIntent,0);

        notification.setLatestEventInfo(context, contentTitle, contentText,
                contentIntent);
        int SERVER_DATA_RECEIVED = id;
        notificationManager.notify(SERVER_DATA_RECEIVED, notification);
    } catch (Exception e) {

        e.printStackTrace();
    }

}

这是我的活动代码:

if (getIntent().getExtras() != null) {
        Toast.makeText(getBaseContext(),
                getIntent().getExtras().getInt("id") + "", Toast.LENGTH_LONG).show();
    }

我创建了多个通知,并为所有人设置了不同的ID,但是当我点击每个通知时,我会给出相同的ID ...

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

当您使用PendingIntent.getActivity(G.context, 0, notificationIntent,0)时,额外内容不会因PendingIntent overview而被替换:

  

由于这种行为,为了检索PendingIntent,重要的是要知道两个Intent何时被认为是相同的。人们常犯的一个错误就是使用Intents创建多个PendingIntent对象,这些对象只在其“额外”内容中有所不同,期望每次都获得不同的PendingIntent。这不会发生。用于匹配的Intent部分与Intent.filterEquals定义的部分相同。如果你使用两个相当于Intent.filterEquals的Intent对象,那么你将获得两个相同的PendingIntent。

虽然在大多数情况下你会用FLAG_UPDATE_CURRENT替换上一个0来更新附加内容,但这并没有帮助同时发出多个通知的问题,而是他们说:

  

如果您确实需要多个不同的PendingIntent对象同时处于活动状态(例如用作同时显示的两个通知),那么您需要确保关联它们的某些内容有所不同他们有不同的PendingIntents。

最简单的方法是将id作为请求代码(第二个参数)传入。这可确保单独管理每个PendingIntent:

PendingIntent.getActivity(G.context, id, notificationIntent, 0)