Android SDK30下Notification调用setStyle失效,MediaSessionCompat需额外配置吗
MediaSessionCompat 必要额外配置说明
仅传入context和tag初始化MediaSessionCompat不足以支撑媒体通知正常渲染,还需要完成以下配置:
- 激活媒体会话
初始化完成后必须调用激活方法,否则通知样式无法读取会话信息:mediaSessionCompat.setActive(true); - 配置播放状态
必须设置PlaybackStateCompat指定当前播放状态、支持的操作、播放进度等信息,供通知样式渲染控制按钮:PlaybackStateCompat playbackState = new PlaybackStateCompat.Builder() // 声明该媒体会话支持的控制操作 .setActions(PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_SKIP_TO_NEXT) // 三个参数分别为:当前播放状态、当前播放进度、播放速度 .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1f) .build(); mediaSessionCompat.setPlaybackState(playbackState); - 配置媒体元数据
必须设置MediaMetadataCompat存储当前播放内容的标题、歌手、封面等信息,供通知样式展示:MediaMetadataCompat metadata = new MediaMetadataCompat.Builder() .putString(MediaMetadataCompat.METADATA_KEY_TITLE, "播放内容标题") .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, "创作者信息") .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, 专辑封面Bitmap实例) .build(); mediaSessionCompat.setMetadata(metadata); - 绑定会话到通知样式
构造MediaStyle时必须传入当前MediaSessionCompat的token,完成关联:Notification notification = new NotificationCompat.Builder(context, 你的通知渠道ID) // 必须配置通知基础项:smallIcon、contentTitle等,缺项会导致通知无法显示 .setStyle(new androidx.media.app.NotificationCompat.MediaStyle() .setMediaSession(mediaSessionCompat.getSessionToken()) // 可选配置:紧凑模式下显示的操作按钮位置 .setShowActionsInCompactView(0, 1, 2)) .build(); - 可选:设置事件回调
如果需要响应通知上的媒体控制按钮点击,需要设置回调监听:mediaSessionCompat.setCallback(new MediaSessionCompat.Callback() { // 按需重写onPlay、onPause、onSkipToNext等对应操作的方法 });
额外注意事项
- Android 8.0及以上系统必须先创建合法的通知渠道,否则通知会直接被系统拦截无法显示
- Android 9.0及以上系统使用前台服务承载媒体播放时,需要申请
android.permission.FOREGROUND_SERVICE权限
内容的提问来源于stack exchange,提问作者Juro
相关产品推荐
相关产品推荐

