我无法更新通知操作(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)请求代码”

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

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

要么:
设置FLAG_UPDATE_CURRENT来更新单个挂起的意图:“标志,如果描述的PendingIntent已经存在,则保留该标志,但用此新Intent中的内容替换其额外数据。”
return PendingIntent.getBroadcast(this, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)

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

10-08 17:25