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);
}
我将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
答案 0 :(得分:18)
我遇到了同样的问题,问题是Android有点过于聪明,而且给你的是PendingIntent
而不是新的PendingIntent
。来自 docs :
人们常犯的一个错误就是创建了
Intent
个PendingIntent
个对象,这些对象的“额外”内容不同,每次都会有不同的Intent
。这不会发生。用于匹配的Intent.filterEquals
部分与Intent
定义的部分相同。如果您使用两个Intent.filterEquals
对象,这些对象与PendingIntent
相同,那么对于这两个对象,您将得到相同的requestCode
。
按如下方式修改代码,以提供唯一的// ...
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, packageName.hashCode(), intent, 0);
// ...
:
PendingIntent
这将确保使用唯一的hashCode()
,而不是相同的。{/ p>
请注意,requestCode
可能不是唯一的,因此如果可能,请使用另一个唯一整数作为{{1}}。
答案 1 :(得分:0)
使用了对我有用的这段代码。
int requestCode = new Random().nextInt();
PendingIntent contentIntent = PendingIntent.getActivity(this, requestCode,
notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);