You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:54:05