我们的应用程序中有类似于以下的代码
val pendingIntent = PendingIntent.getActivity(ctx, id.toInt(), intent, PendingIntent.FLAG_CANCEL_CURRENT)
val builder = NotificationCompat.Builder(ctx, Channel.TEST_CHANNEL.channelId)
builder.setTicker(tickerText)
.setContentTitle(contentTitle)
.setContentText(contentText)
.setVibrate(vibrate)
.setSmallIcon(icon)
.setAutoCancel(true)
.setLights(-0xff0100, 300, 1000)
.setSound(uri)
.setContentIntent(pendingIntent)
.setStyle(NotificationCompat.BigTextStyle().bigText(contentText))
.addAction(R.drawable.ic_notification, ctx.getString(R.string.notification), piAction)
val notification = builder.build()
val nf = ctx.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
nf.notify(NOTIFICATION_TAG, id.toInt(), notification)
}
从最近开始,我们注意到一些运行android 8+的设备上的通知在显示后开始短暂消失,没有用户的交互。将
auto-cancel
设置为false
有帮助,但用户体验会降低。id
是数据库中唯一的项ID。这可能是需要注意的重要事情-从技术上讲,我们可以让用户显示、删除/取消具有这样的id
的通知,然后在稍后的某个时间再次用于具有相同ID的类似通知。这可能是原因吗? 最佳答案
我们已经更新了支持库,并在builder上尝试了以下方法以获得成功:
builder.setTicker(tickerText)
...
.setTimeoutAfter(-1)
...
将此参数设置为正值会延迟通知消失的时间(因此它确实会影响)。因此,我们尝试了一个负数,通知似乎留在那里了。
我找不到任何合理的文档来解释这一点,所以这个答案不是100%,但请暂时保存在这里,让其他人尝试看看它是否有帮助。