Android 通知操作 - Intent Extra 未按预期工作

标签 android android-intent android-notifications

我正在创建一个包含多个操作的通知。我正在使用 broadcast intents 来传达一个已被推送并采取特定行动。有 4 个按钮,我创建了 4 个独立的 Intent 。每个都有相同的 Action 字符串,但 StringExtra 不同。

Intent intNow = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_NOW);
    Intent intEmail = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_EMAIL);
    Intent intLater = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_LATER);
    Intent intNever = new Intent(mThis, MyReceiver.class).setAction(actionNotify).putExtra("button", ACT_NEVER);

    Notification.Builder myRatingNotification = new Notification.Builder(mThis)
            .setContentTitle(title)
            .setContentText(text)
            .setSmallIcon(R.mipmap.ic_launcher)
            .addAction(0, mThis.getString(R.string.Rate_Act_Now), PendingIntent.getBroadcast(mThis, 0, intNow, PendingIntent.FLAG_UPDATE_CURRENT))
            .addAction(0, mThis.getString(R.string.Rate_App_Email), PendingIntent.getBroadcast(mThis, 0, intEmail, PendingIntent.FLAG_UPDATE_CURRENT))
            .addAction(0, mThis.getString(R.string.Rate_Act_Later), PendingIntent.getBroadcast(mThis, 0, intLater, PendingIntent.FLAG_UPDATE_CURRENT))
            .addAction(0, mThis.getString(R.string.Rate_Act_Never), PendingIntent.getBroadcast(mThis, 0, intNever, PendingIntent.FLAG_UPDATE_CURRENT))
            .setAutoCancel(true);

    Notification notification = new Notification.BigTextStyle(myRatingNotification).bigText(text).build();
    ((NotificationManager) mThis.getSystemService(Context.NOTIFICATION_SERVICE)).notify(notificationId, notification);

所以通知创建成功。按钮在那里。但无论我推送哪一个,传递给 receiver 的额外内容始终是最后定义的操作。也就是说,在上面的示例中,每个按钮都返回一个等于 ACT_NEVER 的 String Extra。如果我对 .addAction 重新排序,因此 intLater 是最后一个,无论我按下哪个按钮,接收方都会告诉我 String Extra 等于 ACT_LATER

我不明白为什么 - 4 个 Intents 完全相互独立。这些操作指定了正确的 Intent。这是怎么回事?我很难过。

最佳答案

  1. 你应该设置一个图标作为第一个参数,而不是0。
  2. 你现在的结果是因为你用了相同的action和相同的requestCode构造了一个PendingIntent,所以4个PendingIntent是一样的,而且你用的是PendingIntent.FLAG_UPDATE_CURRENT,所以最后一个PendingIntent的extra会替换pre一个。

所以要解决你的问题,你只需要为四个PendingIntent设置不同的requestCode,就像这样:

.addAction(0, mThis.getString(R.string.Rate_Act_Now), PendingIntent.getBroadcast(mThis, 0, intNow, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(0, mThis.getString(R.string.Rate_App_Email), PendingIntent.getBroadcast(mThis, 1, intEmail, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(0, mThis.getString(R.string.Rate_Act_Later), PendingIntent.getBroadcast(mThis, 2, intLater, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(0, mThis.getString(R.string.Rate_Act_Never), PendingIntent.getBroadcast(mThis, 3, intNever, PendingIntent.FLAG_UPDATE_CURRENT))

关于Android 通知操作 - Intent Extra 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388326/

相关文章:

android - 使用变量来选择数组

android - 我的 Flash 应用程序如何才能正确适合所有 Android 设备?

安卓分享图片不工作

android-notifications - 带有 “null” PendingIntent的通知

android - 从 adb 在后台运行 logcat

Android游戏编程——堆问题

android - Android 上的任务和返回堆栈

android - 启动 Intent 服务并关闭应用程序

java - 广播类未接收到 BOOT_COMPLETED 的广播 Intent

android - 提醒功能