当我们将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。 日志显示对象与预期相同。
感谢
答案 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?