Android MediaSessionCompat 初步见

587 阅读1分钟

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()