android中的通知在点击时采取相同的意图.
我在安装主题后发送通知.考虑我安装4个主题,4个通知出现在通知窗口中,但是当我点击每个通知时,它将启动特定活动,但意图是每个意图具有相同的数据.
我在安装主题后发送通知.考虑我安装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,intent,0); notification.setLatestEventInfo(mContext,"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); }
我正在onCreate of ThemeInfo活动中打印意图数据
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
解决方法
我遇到了同样的问题,问题是Android有点过于聪明,并且给你相同的PendingIntents而不是新的.从
docs:
A common mistake people make is to create multiple
PendingIntent
objects withIntent
s that only vary in their “extra” contents,expecting to get a differentPendingIntent
each time. This does not happen. The parts of theIntent
that are used for matching are the same ones defined byIntent.filterEquals
. If you use twoIntent
objects that are equivalent as perIntent.filterEquals
,then you will get the samePendingIntent
for both of them.
// ... PendingIntent pendingIntent = PendingIntent.getActivity(mContext,packageName.hashCode(),0); // ...
这将确保使用唯一的PendingIntent,而不是相同的PendingIntent.
请注意,hashCode()可能不是唯一的,因此如果可能,请使用另一个唯一整数作为requestCode.