startForeground() 总是在 Samsung 8.0 设备上显示弹出窗口

startForeground() always shows a popup on Samsung 8.0 device

每次我在前台服务中使用 startForeground() 以在其通知中更新状态时,我遇到了 Samsung Galaxy S7 Edge 显示弹出通知的问题。

首先,这个问题出现在所有 Android 8.0 设备上,但通过将我的通知通道优先级设置为 IMPORTANCE_LOW 很容易解决。但问题仍然存在于三星设备上。

所以,问题是,如何在 Samsung 8.0+ 设备上静默更新我的前台服务通知?

我的代码如下

申请class:

override fun onCreate() {
        super.onCreate()
        //other code
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            notificationManager.createNotificationChannels(listOf(
                    //
                    NotificationChannel(MY_NOTIFICATION_CHANNEL, "My channel", NotificationManager.IMPORTANCE_LOW).apply {
                        setSound(null, null)
                    }
                    //
            ))
        }
    }

前台服务启动:

val notification = NotificationCompat.Builder(this, MY_NOTIFICATION_CHANNEL)
                .setSmallIcon(android.R.drawable.stat_sys_warning)
                .setColor(App.context().resources.getColor(R.color.primary_dark))
                .setContentText(if (/*logic*/) "This" else "That")
                .addAction(0, if (enable) "Disable" else "Enable", firstIntent)
                .addAction(0, "Another action", secondIntent)
                .build()

        startForeground(MY_NOTIFICATION_ID, notification)

我一直在调查同样的事情。您能做的最好的事情就是创建没有渠道的通知。服务从托盘中没有任何内容开始。似乎对我有用。

NotificationCompat.Builder(this)

但是,此构造函数在 26.1.0 中已弃用

NotificationCompat.BuildersetOnlyAlertOnce 方法,当设置为 true 时,它只会显示一次弹出窗口。