【问题标题】:Get extra from notificationIntent in activity while launchMode="singleTop" with multiple notifications在具有多个通知的 launchMode="singleTop" 时从活动中的 notificationIntent 中获取额外信息
【发布时间】:2015-03-19 09:48:24
【问题描述】:

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

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

首先是我的Activity(假设是MainActivitylaunchModesingleTop。我将其设置为 manifest.i.e.

<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。但是,while clicking on any Notification (let's say we've 5 notifactions) it just returns the fifth extra put while generating Notification all top four notification extra are just like lost somewhere

在我的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

请帮忙。

【问题讨论】:

    标签: android notifications android-pendingintent


    【解决方案1】:

    您没有创建唯一的PendingIntents。在 Stackoverflow 上,这个问题肯定有一千个答案。

    当你调用它时:

    PendingIntent pendingIntent = PendingIntent.getActivity(
            BeaconService.this, 0, notifyIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);
    

    第二次,它会找到第一个PendingIntent 并返回一个对它的引用(Android 不会创建另一个)。此外,由于您设置了FLAG_UPDATE_CURRENT,Android 将修改底层Intent,方法是用您在新Intent 中提供的额外内容覆盖旧Intent 中的额外内容。这就是为什么它总是只提供一个IntentIntent 总是有最后一组附加值。

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

    【讨论】:

    • 为 PendingIntent.getActivity() 提供一个唯一的数字作为 requestCode 参数已经奏效,谢谢!
    【解决方案2】:

    @David Wasser 感谢您的回答!

    我只是想分享一段我用过并解决了我的问题的代码。

    PendingIntent.getActivity() 提供一个唯一编号作为requestCode 参数是使用多重通知的正确解决方案,而launchmode="singleTop"

    To provide unique 代码为requestCode 我所做的是,将NOTIFICATION_ID 放置为requestCode 即,

    PendingIntent pendingIntent = PendingIntent.getActivity(
            BeaconService.this, NOTIFICATION_ID, notifyIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);
    

    我也找到了相同的solution at here

    那是perfect unique requestCode in my case。我希望这对面临问题的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-12-12
      • 2014-11-04
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多