显示后通知消失

时间:2018-03-20 21:43:46

标签: android notifications

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

    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的类似通知的时间。这可能是原因吗?

4 个答案:

答案 0 :(得分:1)

我们已经更新了支持库,并在构建器上尝试了以下方法以获得好运:

 builder.setTicker(tickerText)
        ...
        .setTimeoutAfter(-1)
        ...

将此参数设置为正值会延迟通知消失这段时间(因此确实会影响)。因此我们尝试了一个负数,通知现在似乎就在那里。

我无法找到任何合理的文档来解释这一点,所以这个答案不是100%,而是暂时保留在这里让其他人试着看看它是否有助于他们

答案 1 :(得分:0)

我发现不确定的是 NotificationCompat.Builder

Android oreo现在使用 Notification.Builder 而不是 NotificationCompat.Builder

你可能需要检查Android版本:

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
         //Use Notification.Builder         
         } else {
         // Use NotificationCompat.Builder.
         }

我不认为唯一ID会成为消失通知的问题。

Google已针对此新变化创建了开源示例。请参阅它以获取更多信息。

https://github.com/googlesamples/android-NotificationChannels

答案 2 :(得分:0)

从android OREO中的电池优化设置中禁用自动优化应用程序。通知会一直保留,只要您愿意

答案 3 :(得分:-1)

.setAutoCancel(假)

可能适合你。