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.Builder
有 setOnlyAlertOnce
方法,当设置为 true
时,它只会显示一次弹出窗口。
每次我在前台服务中使用 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.Builder
有 setOnlyAlertOnce
方法,当设置为 true
时,它只会显示一次弹出窗口。