gpt4 book ai didi

android - 在具有多个通知的 launchMode ="singleTop"时从 Activity 中的 notificationIntent 获取额外信息

转载 作者:行者123 更新时间:2023-11-29 00:12:39 24 4
gpt4 key购买 nike

我在 putExtra 使用 PendingIntent 时遇到多个通知问题。在 Activity getStringExtra 中,Intent 在生成 Notification 时返回最后一个 putExtra

让我先解释完整的场景,如果我错了,请让我更正。

首先,我的Activity(比如说它的MainActivity)launchModesingleTop。我将其设置为 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 总是有最后一组额外的。

您需要使每个 PendingIntent 都是唯一的。有很多方法可以做到这一点(设置不同的附加功能不是其中一种方法)。尝试向 PendingIntent.getActivity() 提供一个唯一编号作为 requestCode 参数。

关于android - 在具有多个通知的 launchMode ="singleTop"时从 Activity 中的 notificationIntent 获取额外信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29141325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com