MediaSessionCompat
是一个媒体对话对象它可以设置MediaSessionCompat.Callback
回调,里面有boolean onMediaButtonEvent(Intent mediaButtonIntent)
,
onPlay
等回调
- 目前测试得知,手指点击系统通知栏里的按钮会触发此回调
- 或者使用
mMediaControllerCompat.getTransportControls().skipToPrevious()
会触发 - 注意使用
mMediaSession.setActive(true)
激活
PlaybackStateCompat
是一个设置通知栏里播放状态的对象,使用builder模式,使用方法如下
PlaybackStateCompat state = new PlaybackStateCompat.Builder()
.setActions(PlaybackStateCompat.ACTION_PLAY
| PlaybackStateCompat.ACTION_PLAY_PAUSE
| PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID
| PlaybackStateCompat.ACTION_PAUSE
| PlaybackStateCompat.ACTION_SKIP_TO_NEXT
| PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
| PlaybackStateCompat.ACTION_STOP)
.setState(PlaybackStateCompat.STATE_STOPPED, 0, 1,
SystemClock.elapsedRealtime()).build();
mMediaSession.setPlaybackState(state);
setActions
:设置可响应的值setState(@State int state, long position, float playbackSpeed, long updateTime)
:第一个参数.新的按钮状态 , 2.进度条进度(ms),3.播放速度 4.更新时间
注意,如果 使用MediaPlayer
,在调用 player,start()
之类的函数后,要改下 PlaybackStateCompat.setState()
,否则activity中的UI和通知栏里按钮状态不匹配
MediaControllerCompat
是一个控制器,控制播放和暂停
mMediaControllerCompat = new MediaControllerCompat(mContext, mMediaSession);
mMediaControllerCompat.registerCallback(MediaControllerCompat.Callback);
MediaControllerCompat.Callback
里的onPlaybackStateChanged
判断播放状态
if (PlaybackStateCompat.ACTION_PLAY == state.getActions()){
}
下面方法去播放
mMediaControllerCompat.getTransportControls().play()