文章来自: http://blog.csdn.net/intbird 转载请说明出处
1. 媒体交互框架
Android媒体框架: https://developer.android.com/guide/topics/media-apps/audio-app/building-an-audio-app
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation "com.android.support:support-media-compat:28.0.0"
1. 服务端
媒体播放资源提供端
- MediaBrowserServiceCompat
- onGetRoot
- onLoadChildren
- MediaSessionCompat
- MediaSessionCompat.Token
- MediaSessionCompat.Callback
- MediaControllerCompat
- MediaControllerCompat.Callback
- PlaybackStateCompat.Builder
- MediaPlayer
实际播放器,基于接口可被替换
2. 客户端
展示媒体进度和控制播放状态
- MediaBrowserCompat.ConnectionCallback
- MediaControllerCompat.Callback
- MediaBrowserCompat.SubscriptionCallback
3. 两端消息交互
- 服务端通知客户端:
mSession.sendSessionEvent(“error_index”, bundle);
- 客户端通知服务端:
mediaControllerCompat.getTransportControls().sendCustomAction(“play_index”,bundle);
2. 播放模式
1. 单曲循环和整体循环
1.单曲循环 PlaybackStateCompat.REPEAT_MODE_ONE
2.整体循环 PlaybackStateCompat.REPEAT_MODE_ALL
3.不做循环 PlaybackStateCompat.REPEAT_MODE_NONE
2. 随机播放和顺序播放
随机播放
是否允许再次播放顺序播放
已播放过的内容顺序播放
是否允许再次播放随机播放
已播放过的内容随机播放
和顺序播放
都是播放队列不循环播放模式
3. 几个问题:
1. 合并播放模式
一般 顺序播放/随机播放/单曲循环/列表循环
是在一个按钮上做来回切换
但是getRepeatMode 和 getShuffleMode是两个模式, 简单做下同步
单曲循环 = controllerCompat.getRepeatMode() == PlaybackStateCompat.REPEAT_MODE_ONE
&& controllerCompat.getShuffleMode() == PlaybackStateCompat.SHUFFLE_MODE_NONE
if (单曲循环) {
controllerCompat.getTransportControls().setShuffleMode(PlaybackStateCompat.SHUFFLE_MODE_NONE);
controllerCompat.getTransportControls().setRepeatMode(PlaybackStateCompat.REPEAT_MODE_ONE);
}
点击按钮循环模式切换和应用
shuffleIndex = (++shuffleIndex % shuffleConfigMapSize);
点击按钮切换的配置列表
private void defaultShuffleConfig(MediaCont