在 Android 上更新有关通知意图的额外数据?

Updating extra data on notification intents on Android?

我无法更新通知操作中包含的额外数据(MainActivity.kt 的第 34 行)。如果我发出多个通知并单击它们上的操作按钮,第一个通知中包含的额外数据将始终传送(NotificationBroadcastReceiver.kt 的第 16 行)。

该值打印在 MainActivity.kt 的第 33 行和 NotificationBroadcastReceiver.kt 的第 17 行的日志上。

即使在清除通知并从任务管理器中终止应用程序后,也会发生这种情况。卸载并重新安装应用程序,将有助于进行一次更新。

Notification Action Demo

来自 MainActivity.kt

  fun notify(v:View) {
    val time = System.currentTimeMillis()
    val mBuilder = NotificationCompat
        .Builder(this,this.localClassName)
        .setSmallIcon(android.R.drawable.btn_default)
        .addAction(android.R.drawable.arrow_down_float,"test",getSnoozePendingIntent(time))
    NotificationManagerCompat.from(this).notify(time.toInt(),mBuilder.build())
  }

  private fun getSnoozePendingIntent(time:Long):PendingIntent {
    val snoozeIntent = Intent(this,NotificationBroadcastReceiver::class.java)
    Log.d("TimeMillis before",time.toString())
    snoozeIntent.putExtra(NotificationBroadcastReceiver.timeTag,time)
    return PendingIntent.getBroadcast(this,0,snoozeIntent,0)
  }

来自 NotificationBroadcastReceiver.kt

  override fun onReceive(context:Context,intent:Intent) {
    val time = intent.getLongExtra(timeTag,0)
    Log.d("TimeMillis after",time.toString())
    NotificationManagerCompat.from(context).cancel(time.toInt())
  }

如果您计划有多个未决意向,请更改 requestCode:"int: Private request code for the sender"

return PendingIntent.getBroadcast(this, 0, snoozeIntent, 0)

收件人:

return PendingIntent.getBroadcast(this, uniqueCode++, snoozeIntent, 0)

或:

设置 FLAG_UPDATE_CURRENT 以更新个人待定意向:"Flag indicating that if the described PendingIntent already exists, then keep it but replace its extra data with what is in this new Intent."

return PendingIntent.getBroadcast(this, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)

https://developer.android.com/reference/android/app/PendingIntent#FLAG_UPDATE_CURRENT