我在使用 PendingIntent
进行 putExtra
时遇到多个通知问题。在 Activity
getStringExtra
中,Intent
在生成 Notification
时返回最后一个 putExtra
。 p>
让我先解释一下完整的场景,如果我错了,请纠正。
首先,我的 Activity
(假设它的 MainActivity
)launchMode
是 singleTop
。我正在将其设置到 list 中。即
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
... />
现在我正在使用此代码生成通知,
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Intent notifyIntent = new Intent(context,
MainActivity.class);
notifyIntent.putExtra("message", msg);
Log.i(TAG, msg);
notifyIntent.putExtra("title", notification_title);
Log.i(TAG, notification_title);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(
BeaconService.this, 0, notifyIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new Notification.Builder(
context).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(notification_title).setContentText(msg)
.setAutoCancel(true).setContentIntent(pendingIntent).build();
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_LIGHTS;
notificationManager.notify(NOTIFICATION_ID, notification);
NOTIFICATION_ID++;
我还使用了标志PendingIntent.FLAG_UPDATE_CURRENT
。但是,当点击任何通知(假设我们有 5 个通知)时,它只会返回第五个额外的内容,同时生成通知,所有前四个额外的通知就像丢失在某处一样
。
在我的MainActivity
中,我还重写了onNewIntent
,例如,
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// getIntent() should always return the most recent
setIntent(intent);
if (intent.hasExtra("message")) {
String message = intent.getStringExtra("message");
}
if (intent.hasExtra("title")) {
String title = intent.getStringExtra("title");
}
}
返回的此额外内容始终来自上次通知的额外内容。我不知道我哪里错了?
我也尝试了一些链接,但没有找到有用的解决方案。
Intent extras being lost when sending with PendingIntent for GCM
请帮忙。
最佳答案
您没有创建唯一的 PendingIntent
。 Stackoverflow 上对于这个问题肯定有一千个答案。
当您调用此方法时:
PendingIntent pendingIntent = PendingIntent.getActivity(
BeaconService.this, 0, notifyIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
第二次,它将找到第一个 PendingIntent
并返回对它的引用(Android 不会创建另一个)。此外,由于您设置了 FLAG_UPDATE_CURRENT
,Android 将修改底层 Intent
,方法是用您在新的 Intent
中提供的额外内容覆盖旧 Intent
中的额外内容。 Intent
。这就是为什么它始终只传递一个 Intent
并且该 Intent
始终具有最后一组额外内容。
您需要使每个 PendingIntent
都是唯一的。有很多方法可以做到这一点(设置不同的附加功能不是方法之一)。尝试提供一个唯一的编号作为 PendingIntent.getActivity()
的 requestCode
参数。
关于android - 在具有多个通知的 launchMode ="singleTop"时从 Activity 中的 notificationIntent 获取额外费用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29141325/