Android Multiple Notification sends the same data when clicked

A notification in android taking the same intention when pressed. I send notifications after installing the theme. Think that I install 4 themes and 4 notifications appear in the notification window, but when I click on each notification, it starts the work in the form of percussion, but the intention has the same data for each intention.

my code is as follows

@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); } 

and I print intent data in onCreate of ThemeInfo as

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

The result that I get in the logs is

 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 
+7
source share
1 answer

I had the same problem, and the problem is that Android is a little too smart and gives you the same PendingIntent , not new ones. From the docs :

Common mistakes people make are creating several PendingIntent objects with Intent that change only in their "extra" content, expecting to get a different PendingIntent every time. This is not happening. The parts of the Intent that are used for matching are the same as those defined by Intent.filterEquals . If you use two Intent objects that are equivalent in Intent.filterEquals , then you get the same PendingIntent for both of them.

Modify your code as follows to provide a unique requestCode :

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

This ensures that the unique PendingIntent , and not the same.

Note that hashCode() may not be unique, so if possible, use another unique integer like requestCode .

+18
source

All Articles