首页 > 代码库 > android 多个notifycation向同一个Actiivity传递不同数据

android 多个notifycation向同一个Actiivity传递不同数据

如果你有这方面的需求,那你实践的时候可能会发现,多个Notifycation点击的时候会传递相同的数据.

通常情况下我们可能这样写.

Notification notification = new Notification(R.drawable.ic_launcher_9, name , System.currentTimeMillis());

Intent intent = new Intent(mContext , ThemeInfo.class);
Bundle bundle = new Bundle();
bundle.putString("apkid", packageName);
bundle.putBoolean("isApplied", false);
intent.putExtra("bundle", bundle);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);

notification.setLatestEventInfo(mContext, name, "hello", pendingIntent);
notification.flags = Notification.FLAG_AUTO_CANCEL;

Log.d("NewThemeChooser__:ThemeChangeReceiver" , "hascode : " + packageName.hashCode() + " installed " + packageName);
notificationManager.notify(packageName.hashCode(), notification);

什么原因呢?

答案就在红色字体部分上。

个人认为是这样的: notifycation点击后整个intent都会通过parcel序列化到内存里。

而pendingIntent的第2个参数requestCode如果相同,数据就会被覆盖。导致传递的数据相同了。

怎么解决呢?

也很简单

PendingIntent pendingIntent = PendingIntent.getActivity(mContext, packageName.hashCode(), intent, 0);

也就是说第2个参数在不同的notifycation中一定要唯一。

 

答案实际上也是我在stackoverflow上找到的. 如果你遇到问题想快速解决的话,stackoverflow是个不错的地方。