在 Android 上更新有关通知意图的额外数据?
Updating extra data on notification intents on Android?
我无法更新通知操作中包含的额外数据(MainActivity.kt
的第 34 行)。如果我发出多个通知并单击它们上的操作按钮,第一个通知中包含的额外数据将始终传送(NotificationBroadcastReceiver.kt
的第 16 行)。
该值打印在 MainActivity.kt
的第 33 行和 NotificationBroadcastReceiver.kt
的第 17 行的日志上。
即使在清除通知并从任务管理器中终止应用程序后,也会发生这种情况。卸载并重新安装应用程序,将有助于进行一次更新。
来自 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
我无法更新通知操作中包含的额外数据(MainActivity.kt
的第 34 行)。如果我发出多个通知并单击它们上的操作按钮,第一个通知中包含的额外数据将始终传送(NotificationBroadcastReceiver.kt
的第 16 行)。
该值打印在 MainActivity.kt
的第 33 行和 NotificationBroadcastReceiver.kt
的第 17 行的日志上。
即使在清除通知并从任务管理器中终止应用程序后,也会发生这种情况。卸载并重新安装应用程序,将有助于进行一次更新。
来自 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