Android 11(SDK 30)通知无法显示,SDK 28及更低版本运行正常
问题排查与解决方案
以下是针对Android 11(SDK 30)通知无法展示问题的分步排查和修复方法:
1. 检查前台服务权限声明
Android 9(API 28)及以上版本要求使用前台服务必须声明对应权限,Android 11对该权限的校验规则更严格,未声明会直接导致前台服务绑定的通知无法展示。
请确认AndroidManifest.xml中已添加如下权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
如果后续适配Android 12及以上版本,还需要额外添加媒体前台服务权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
2. 检查通知渠道状态
- 进入系统设置的应用通知管理页,查看你创建的
Channel(2)渠道是否处于开启状态,通知权限是否被系统或用户手动关闭。 - 若你此前在测试设备上安装过低版本应用,旧版本创建的同ID通知渠道属性修改不会生效(通知渠道一旦创建,仅用户可修改配置,应用代码无法更新),请卸载应用重装后再测试。
3. 修复MediaSession初始化逻辑
你当前代码每次展示通知时都会新建MediaSessionCompat实例且没有激活,Android 11对媒体样式通知的校验更严格,未激活的MediaSession会导致通知无法正常渲染。
请调整逻辑,在组件(Service/Activity)初始化阶段就创建并激活MediaSession,全局复用该实例:
// 声明全局变量 private MediaSessionCompat mMediaSession; // onCreate生命周期中初始化 mMediaSession = new MediaSessionCompat(getBaseContext(), TAG); mMediaSession.setActive(true); // 构建通知时直接复用已初始化的实例 .setStyle(new androidx.media.app.NotificationCompat.MediaStyle() .setMediaSession(mMediaSession.getSessionToken()))
4. 检查通知小图标规范
Android 11对通知小图标的格式要求更严格,小图标必须为带透明通道的矢量素材,若你传入的playPauseBtn为不透明位图、或尺寸不符合规范,会导致通知无法正常弹出。可先将setSmallIcon的入参替换为应用默认的启动图标测试,若通知可正常弹出则说明是小图标素材问题。
内容的提问来源于stack exchange,提问作者Alex Goodman
相关产品推荐
相关产品推荐

