使用ExoPlayer的media2扩展时如何禁用Android 11系统媒体通知
修复方案
你可以通过以下两种不需要重构现有MediaSession相关代码的方案禁用系统媒体通知:
方案1:修改SessionServiceCallback的onGetRoot返回逻辑
androidx.media2的MediaSessionService已经预留了等效于旧版onGetRoot返回null的逻辑,你只需要给服务设置自定义的SessionServiceCallback,直接拒绝系统媒体服务的连接请求即可:
// Java实现示例 @Override public void onCreate() { super.onCreate(); setSessionServiceCallback(new SessionServiceCallback() { @Override public SessionServiceCallback.ConnectionResult onGetRoot( @NonNull SessionServiceCallback.ConnectionRequest request) { // 直接返回拒绝结果,阻止系统媒体服务连接 return SessionServiceCallback.ConnectionResult.reject(); } }); }
// Kotlin实现示例 override fun onCreate() { super.onCreate() setSessionServiceCallback(object : SessionServiceCallback() { override fun onGetRoot(request: ConnectionRequest): ConnectionResult { return ConnectionResult.reject() } }) }
方案2:临时停用MediaSession发布状态
如果你后续还要适配系统媒体通知,只是暂时隐藏,可以选择在初始化MediaSession时不调用publish()方法,或者在每次播放时调用session.setActive(false),就不会触发系统通知生成,需要恢复适配时打开对应开关即可。
注意事项
- 上述修改不会影响原有
PlayerNotificationManager自定义通知的正常功能 - 后续要适配系统媒体通知时,只需要删除
onGetRoot的拒绝逻辑、恢复Session的激活状态即可,不需要重构现有代码结构
内容的提问来源于stack exchange,提问作者Stuart Gilbert
相关产品推荐
相关产品推荐

