我有一个I / O任务期间弹出的通知,我想查看,以便用户知道其他地方(状态栏)的详细信息。在较旧的设备上,我的代码可以正常工作,但在较新的设备上,通知不会消除状态栏,它会成为一个永久的抬头。我希望在较新的设备上,通知更新(当前文件)会导致查看重置。任何人都知道确保通知的方法是偷看,而不是单挑?
我的应用程序是全屏,这就是为什么default
优先偷看。
Util.createNotificationChannel(
applicationContext,
"copy",
"Copying...",
"Notifications for copy tasks.")
val builder = Util.createNotification(
applicationContext,
"copy",
applicationContext.getString(R.string.copyingImages),
applicationContext.getString(R.string.preparing))
val notifications = NotificationManagerCompat.from(applicationContext)
notifications.notify(builder.build())
...
(loop)
builder
.setProgress(images.size, index, false)
.setContentText(value.name)
.priority = NotificationCompat.PRIORITY_DEFAULT
notifications.notify(builder.build())
我相信Notification.Builder.setOnlyAlertOnce()
会得到你期望的结果。
@paulajcm的核心是:
我相信Notification.Builder.setOnlyAlertOnce()会得到你期望的结果。
要考虑的另一个方面是通知ID必须是唯一的,否则您永远不会再查看该类型的通知,因为您已经有效地将该ID设置为不再查看。
builder.notify(JOB_TAG, id, notification) // id must be 'unique'
我做的另一件事是切换setOnlyAlertOnce(false)
作为最后的消息,所以有一个方法可以通知操作完成:
builder
.setContentText("Complete")
.setProgress(0,0,false)
.setOnlyAlertOnce(false)
notifications.notify(builder.build(), notificationId)
所以现在,当一个长时间运行的后台任务已经开始和结束时,用户很清楚,而不会在两者之间发生错误。