Android多重通知单击发送相同的数据

android中的通知采取同样的意图点击。 我在安装主题后发送通知。 考虑我在通知窗口中安装了4个主题和4个通知,但是当我点击每个通知时,它将启动特定的活动,但意图是每个意图都有相同的数据。

我的代码是这样的

@SuppressWarnings("deprecation") void sendInstalledNotification(String fileName, String packageName) { NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); String name = ""; try { name += fileName.substring(fileName.lastIndexOf(".") + 1); } catch (Exception e) { Log.e("NewThemeChooser", "Invalid Package name"); e.printStackTrace(); } name += " Installed"; 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, "Click to Apply Theme", pendingIntent); notification.flags = Notification.FLAG_AUTO_CANCEL; Log.d("NewThemeChooser__:ThemeChangeReceiver" , "hascode : " + packageName.hashCode() + " installed " + packageName); notificationManager.notify(packageName.hashCode(), notification); } 

而且我正在将ThemeInfo活动的onCreate中的意图数据打印为

  Bundle bundle = getIntent().getBundleExtra("bundle"); apkid = bundle.getString("apkid"); isApplied = bundle.getBoolean("isApplied", false); System.out.println("NewThemeChooser__:bundle apkid " + apkid ); 

我得到日志的结果是

 D/NewThemeChooser__:ThemeChangeReceiver( 4423): hascode : -186637114 installed com.test.theme.MiCrease D/NewThemeChooser__:ThemeChangeReceiver( 4423): hascode : 2106806482 installed com.test.theme.iPhone D/NewThemeChooser__:ThemeChangeReceiver( 4423): hascode : -1413669305 installed com.test.theme.Simpsons D/NewThemeChooser__:ThemeChangeReceiver( 4423): hascode : -2146296452 installed com.test.theme.AnnaTheme I/System.out( 4423): NewThemeChooser__:bundle apkid com.test.theme.MiCrease I/System.out( 4423): NewThemeChooser__:bundle apkid com.test.theme.MiCrease I/System.out( 4423): NewThemeChooser__:bundle apkid com.test.theme.MiCrease I/System.out( 4423): NewThemeChooser__:bundle apkid com.test.theme.MiCrease 

Solutions Collecting From Web of "Android多重通知单击发送相同的数据"

我有同样的问题,问题是Android是有点太聪明,并给你相同的PendingIntent s而不是新的。 从文档

人们犯的一个常见错误就是用Intent创build多个PendingIntent对象,这些对象的“额外”内容只有不同,期望每次都得到不同的PendingIntent 。 这不会发生。 用于匹配的Intent部分与Intent.filterEquals定义的Intent.filterEquals相同。 如果您使用两个与Intent.filterEquals等效的Intent对象,那么您将为它们获得相同的PendingIntent

修改您的代码如下,以提供一个唯一的requestCode

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

这将确保使用唯一的PendingIntent ,而不是相同的。

请注意, hashCode()可能不是唯一的,所以如果可能的话,使用另一个唯一的整数作为requestCode