我无法更新通知操作(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