Android 11默认开启Floating Notifications(浮动通知)开关的方案咨询
Android 11 默认启用浮动通知实现方案
- Android 8.0及以上系统的浮动通知开关默认状态由通知渠道的重要级别决定,你需要在首次创建通知渠道时将重要级别设置为
NotificationManager.IMPORTANCE_HIGH,此时原生系统默认会开启浮动通知权限。
注意:通知渠道一旦创建完成,应用代码无法再修改其重要级别,如果你之前已经用相同渠道ID创建过低优先级渠道,需要更换新的渠道ID重新创建才能生效。
// 创建高优先级通知渠道示例 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channelId = "video_call_high" val channelName = "视频通话通知" val importance = NotificationManager.IMPORTANCE_HIGH val channel = NotificationChannel(channelId, channelName, importance).apply { description = "用于展示视频通话来电通知" enableVibration(true) vibrationPattern = longArrayOf(1000, 1000, 1000) setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), Notification.AUDIO_ATTRIBUTES_DEFAULT) } val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(channel) }
- 针对视频通话这类高优先级即时场景,你可以给通知配置
setFullScreenIntent属性,系统会优先触发悬浮通知展示,即使用户正在使用其他前台应用也不会被拦截:
// 通知添加全屏意图配置示例 val callIntent = Intent(this, VideoCallActivity::class.java) val pendingIntent = PendingIntent.getActivity(this, 0, callIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) val notificationBuilder = NotificationCompat.Builder(this, "video_call_high") .setSmallIcon(R.drawable.ic_call_icon) .setContentTitle("收到视频通话") .setContentText("联系人正在呼叫你") .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_CALL) .setFullScreenIntent(pendingIntent, true) .setAutoCancel(true)
- 小米、华为、OPPO、vivo等国产定制系统会额外修改通知逻辑,即使配置了高优先级渠道,也可能默认关闭浮动通知开关。这种场景下你可以引导用户跳转到应用通知设置页面手动开启:
// 跳转应用通知设置页示例 val intent = Intent() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS intent.putExtra(Settings.EXTRA_APP_PACKAGE, packageName) } else { intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS intent.data = Uri.fromParts("package", packageName, null) } startActivity(intent)

内容的提问来源于stack exchange,提问作者Davy
相关产品推荐
相关产品推荐

