我们的应用程序中有类似于以下的代码

    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%,但请暂时保存在这里,让其他人尝试看看它是否有帮助。

08-18 08:28
查看更多