向PendingIntent添加标志

时间:2014-09-11 16:42:45

标签: android android-pendingintent

当我们将0作为标志传递给PendingIntent时如下:

PendingIntent pi=PendingIntent.getActivity(this, 1, i, 0);

是否遵循任何标志规则意味着默认情况下0对应于任何标志。

如果我们创建另一个PendingIntent为

 PendingIntent pii=PendingIntent.getActivity(this, 1, i, 0);

它是否与之前相同,如果我对Intent中的数据进行任何更改,它现在是否与Intent中的新数据相对应,或者仍然具有旧数据。

我面临的另一个问题是 我想检查旗帜

PendingIntent.FLAG_NO_CREATE

我写了以下代码:

Intent i=new Intent(this,NotifResult.class);

        i.putExtra("number",50);
        PendingIntent pi=PendingIntent.getActivity(this, 1, i, 0);
NotificationCompat.Builder nb=new NotificationCompat.Builder(this);
        nb.setSmallIcon(R.drawable.ic_launcher);
        nb.setTicker("ticker is here");
        nb.setWhen(System.currentTimeMillis())
        .setContentTitle("just the title")
        .setContentText("and the description")
        .setAutoCancel(true)
        .setDefaults(Notification.DEFAULT_ALL)
        .setContentIntent(pi);


Notification notif=nb.build();
        NotificationManager nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm.notify(11, notif);

        i.putExtra("number",80);

        PendingIntent pisecond=PendingIntent.getActivity(this, 1, i, PendingIntent.FLAG_NO_CREATE);

        if(pi.equals(pisecond))
            Log.v("check","they are equal");
        else
            Log.v("check", "they are not equal");

        notif.contentIntent=pisecond;

        nm.notify(11, notif);

根据文档,如果存在existign对象,PendingIntent.FLAG_NO_CREATE不会创建任何新对象。 我在NotifResult活动中打印数字的值,其中数字值将是80而不是50,因为它应该使用具有旧值的现有意图(根据我的理解)。明确更新为什么输出将来80。 日志显示对象与预期相同。

感谢

1 个答案:

答案 0 :(得分:6)

致电时:

PendingIntent pi=PendingIntent.getActivity(this, 1, i, 0);

传递0作为flags参数意味着您没有设置标志。

如果你打电话:

PendingIntent pii=PendingIntent.getActivity(this, 1, i, 0);
再次

,您传递的Intent与第一次通话中的Intent相匹配,然后您将获得与第一次通话时相同的PendingIntent。 “匹配”表示动作,数据,类别和组件都是相同的。匹配后,额外内容不被视为

如果您在第二次通话的Intent中提供了不同的额外内容,那么这些附加内容在发送时不会出现在PendingIntent中。将使用第一次通话中Intent的额外内容。

我无法解释您所看到的关于“50”和“80”的行为。根据文档和我的理解,根据我自己的观察,你应该看到“50”而不是“80”。必须有其他奇怪的事情发生。你在真实设备上测试吗?一个模拟器?什么版本的Android?