覆盖意图附加内容

时间:2016-12-23 10:37:44

标签: android android-intent android-pendingintent

我使用以下代码创建通知(Kotlin)

val builder = NotificationCompat.Builder(ctx)
           ........
      .setContentIntent(PendingIntent.getActivity(ctx, 891, ctx.newIntent<MainActivity>()
            .putExtra("id", member.id)
            .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 0))

因此,当点击通知时,MainActivity将选择用户,从中获得通知。

override fun onNewIntent(intent: Intent?) {
    val id = intent?.getStringExtra("id") ?: return
    selectUser(extra)
}

我发送了来自2个不同用户的2个通知。点击第一个通知后,它工作正常(id == _ User1UUID)并选择用户。然后我按回来,从第二个用户发送另一个通知,点击它,意图仍然包含以前的用户ID并选择它(通过断点检查)。

我知道,这是因为FLAG_ACTIVITY_REORDER_TO_FRONT,但我必须只保留MainActivity的一个实例。

2 个答案:

答案 0 :(得分:1)

您实际上需要给定代码才能使每个通知唯一

notificationManager.notify( (int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE) /* ID of notification */, notificationBuilder.build());

如果您已经这样做,请尝试下面给出的代码

Intent intent = new Intent(this, MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                        PendingIntent.FLAG_ONE_SHOT);

答案 1 :(得分:0)

您可能遇到的问题是您不会生成唯一的PendingIntent。如果您有2个不同用户的通知,则他们都会使用相同的PendingIntent,因此您会在两者中看到相同的id个额外费用。

要创建唯一的PendingIntent,请更改此项:

 .setContentIntent(PendingIntent.getActivity(ctx, 891, ctx.newIntent<MainActivity>()
        .putExtra("id", member.id)
        .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 0))

到此:

int randomNumber = ... // Use some random number here, or use your "id" if your "id" can be converted to an integer here.
                       //  This random number needs to be unique for each Notification you create.

 .setContentIntent(PendingIntent.getActivity(ctx, randomNumber, ctx.newIntent<MainActivity>()
        .putExtra("id", member.id)
        .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), u))