从具有多个通知的launchMode =“singleTop”中的notificationIntent获取额外信息

时间:2015-03-19 09:48:24

标签: android notifications android-pendingintent

putExtra使用PendingIntent时,我遇到多次通知问题。在Activity getStringExtra fom 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

请帮忙。

2 个答案:

答案 0 :(得分:1)

您不能创建独特的PendingIntent。在Stackoverflow上,这个问题肯定有一千个答案。

当你这样称呼时:

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

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

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

答案 1 :(得分:1)

@David Wasser感谢您的回答!

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

requestCode提供PendingIntent.getActivity()参数的唯一编号是launchmode="singleTop"时具有多个通知的正确解决方案。

To provide unique代码为requestCode我所做的是,NOTIFICATION_IDrequestCode,即

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

我也发现了同样的solution at here

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