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

标签 android notifications android-pendingintent

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

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

首先,我的 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 并且该 Intent 始终具有最后一组额外内容。

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

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

相关文章:

android - 使用替换时 fragment 不调用 onPause 或 onStop

swift - 3 天内的 UserNotification 然后每天/每小时重复一次 - iOS 10

php - Laravel:通知中的 HTML

android - 如何在锁定屏幕上执行通知操作(点击)?

android - 使用 FileProvider uri 打开 PDF 文件会打开一个空白屏幕

java - Android中滑动屏幕的动态内容

java - 启动另一个不是库的项目的 Activity | Java/安卓

java - 生成随机的简单数学除法问题

java - Android:如何创建多个闹钟并在选择后取消它们

android - 在android中打开通知时页面不刷新