Android 如何在不唤醒屏幕的情况下发送通知

How to send a notification without waking the screen on Android

我的应用程序中有一个前台服务,其持久通知中有一个计时器,这意味着通知每秒发送一次以更新通知中显示的计时器。这意味着在某些设备上,通知设置为完全唤醒屏幕或在屏幕上短暂显示深色版本,屏幕会一直处于唤醒状态。

有没有办法以不唤醒屏幕的方式发送通知?将其设置为设备上的静默通知可以解决此问题,但前台服务通知的要点是它在设备上很显眼,因此这不是一个很好的解决方案,而且并非所有用户都知道这样做。

这就是我构建通知的方式:

NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("Currently Reading")
            .setSound(null)
            .setContentIntent(TaskStackBuilder.create(this).run {
                addNextIntentWithParentStack(timerIntent)
                getPendingIntent(
                    0,
                    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
                )
            })
            .setSmallIcon(R.drawable.ic_launcher_foreground)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setAutoCancel(true)

您是否尝试过更新通知?并使用 setOnlyAlertOnce()

“您可以选择调用 setOnlyAlertOnce(),这样您的通知只会在通知第一次出现时打断用户(通过声音、振动或视觉提示),而不会在以后的更新中出现。”

检查这个link https://developer.android.com/training/notify-user/build-notification.html#Updating

setPriority(NotificationCompat.PRIORITY_DEFAULT)?

降低它,这样就不会在锁屏上显示(android 7 及以上)

这里我们对这个部分进行了一个小修复: setPriority(NotificationCompat.PRIORITY_LOW)

您还可以添加: setVisibility(NotificationCompat.VISIBILITY_PRIVATE)

但它也会从锁屏中删除通知...

文档:

  1. https://developer.android.com/training/notify-user/build-notification.html#lockscreenNotification
  2. https://developer.android.com/training/notify-user/channels#importance

希望这对您有所帮助 =]