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

Posted

技术标签:

【中文标题】如何在不唤醒 Android 屏幕的情况下发送通知【英文标题】:How to send a notification without waking the screen on Android 【发布时间】:2021-12-30 06:59:45 【问题描述】:

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

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

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

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)

【问题讨论】:

我认为有一个setShowSilentsetSilent 你可以使用...但我什至不确定它是否不会唤醒设备:) 【参考方案1】:

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

“您可以选择调用 setOnlyAlertOnce(),以便您的通知仅在通知第一次出现时(通过声音、振动或视觉线索)中断用户,而不是以后更新。”

检查此链接 https://developer.android.com/training/notify-user/build-notification.html#Updating

【讨论】:

【参考方案2】:

setPriority(NotificationCompat.PRIORITY_DEFAULT)?

降低它,所以不会在锁屏上显示(android 7 及更高版本)

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

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

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

文档:

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

希望这会有所帮助 =]

【讨论】:

这也很有用 -» developer.android.com/reference/android/app/… =]

以上是关于如何在不唤醒 Android 屏幕的情况下发送通知的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 3rd 方服务的情况下使用 WCF 将推送通知发送到单独的 Android 设备?

是否可以在不构建任何应用程序的情况下向 Android 发送推送通知?

如何在不使用 Firebase 控制台的情况下向 iOS 设备发送 Firebase 云消息通知?

如何在不创建通知的情况下将图标添加到 Android 状态栏?

Xamarin - 如何在不使用其他服务的情况下发送推送通知

可以使用推送通知在不通知用户的情况下运行代码吗?