非活跃Media Session无法重启问题求助
重启非活跃Media Session失败问题
我已遵循官方文档中关于重启非活跃Media Session的指引,包括在AndroidManifest中配置正确条目,但问题仍未解决。
从Logcat中可看到应用已连接到MediaBrowserService,但后续无任何动作:
2023-02-14 13:23:20.187 11970-11970 MediaBrowserCompat D Connecting to a MediaBrowserService. 2023-02-14 13:23:20.216 11970-11970 ExoPlayerImpl I Init 690e213 [AndroidXMedia3/1.0.0-beta03] [redfin, Pixel 5, Google, 33] 2023-02-14 13:23:20.253 11970-11970 ExoPlayerImpl I Release 690e213 [AndroidXMedia3/1.0.0-beta03] [redfin, Pixel 5, Google, 33] [media3.common, media3.exoplayer, media3.decoder, media3.datasource, media3.extractor] 2023-02-14 13:23:20.760 11970-11970 MediaBrowserCompat D Connecting to a MediaBrowserService. 2023-02-14 13:23:20.783 11970-11970 ExoPlayerImpl I Init 7df60bd [AndroidXMedia3/1.0.0-beta03] [redfin, Pixel 5, Google, 33] 2023-02-14 13:23:20.819 11970-11970 ExoPlayerImpl I Release 7df60bd [AndroidXMedia3/1.0.0-beta03] [redfin, Pixel 5, Google, 33] [media3.common, media3.exoplayer, media3.decoder, media3.datasource, media3.extractor] 2023-02-14 13:23:26.319 11970-11970 MediaBrowserCompat D Connecting to a MediaBrowserService. 2023-02-14 13:23:26.345 11970-11970 ExoPlayerImpl I Init 540e5f3 [AndroidXMedia3/1.0.0-beta03] [redfin, Pixel 5, Google, 33] 2023-02-14 13:23:26.388 11970-11970 ExoPlayerImpl I Release 540e5f3 [AndroidXMedia3/1.0.0-beta03] [redfin, Pixel 5, Google, 33] [media3.common, media3.exoplayer, media3.decoder, media3.datasource, media3.extractor] 2023-02-14 13:23:27.001 11970-11970 MediaBrowserCompat D Connecting to a MediaBrowserService. 2023-02-14 13:23:27.025 11970-11970 ExoPlayerImpl I Init f1d97e0 [AndroidXMedia3/1.0.0-beta03] [redfin, Pixel 5, Google, 33]
我了解ExoPlayer有MediaSessionConnector,但官方文档未提及需使用它,且缺少相关实现示例。
以下是我的MediaBrowserService精简代码:
public class MediaPlayerService extends MediaBrowserServiceCompat { private ExoPlayer mPlayer; private MediaSessionCompat mMediaSessionCompat; @Override public void onCreate() { super.onCreate(); mMediaSessionCompat = new MediaSessionCompat(this, MediaPlayerService.class.getSimpleName()); mMediaSessionCompat.setCallback(mMediaSessionCallback); mMediaSessionCompat.setActive(true); mPlaybackBuilder = new PlaybackStateCompat.Builder(); mPlaybackBuilder.setActions( PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_SKIP_TO_NEXT); setSessionToken(mMediaSessionCompat.getSessionToken()); mPlaybackAttributes = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH) .build(); mPlayer = new ExoPlayer.Builder(mContext).build(); mPlayer.addListener(new PlayerEventListener()); } private final MediaSessionCompat.Callback mMediaSessionCallback = new MediaSessionCompat.Callback() { @Override public void onStop() { super.onStop(); StopAudio(); } @Override public void onPlay() { super.onPlay(); PlayAudio(); } @Override public void onPause() { super.onPause(); PauseAudio(); } }; private class PlayerEventListener implements Player.Listener { @Override public void onPlaybackStateChanged(int state) { if (state == Player.STATE_BUFFERING) { } else if (state == Player.STATE_READY) { } else if (state == Player.STATE_ENDED) } } @Override public void onDestroy() { super.onDestroy(); mMediaSessionCompat.setMetadata(null); mMediaSessionCompat.setActive(false); mMediaSessionCompat.release(); mPlayer.release(); } }
内容的提问来源于stack exchange,提问作者Kris B
相关产品推荐
相关产品推荐

