package cn.ycbjie.ycaudioplayer.manager; import android.os.Build; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.MediaSessionCompat; import android.support.v4.media.session.PlaybackStateCompat; import cn.ycbjie.ycaudioplayer.base.BaseAppHelper; import cn.ycbjie.ycaudioplayer.service.PlayService; import cn.ycbjie.ycaudioplayer.model.bean.AudioBean; import cn.ycbjie.ycaudioplayer.utils.musicUtils.CoverLoader; public class MediaSessionManager { private static final String TAG = "MediaSessionManager"; private static final long MEDIA_SESSION_ACTIONS = PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_SKIP_TO_NEXT | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_SEEK_TO; private PlayService mPlayService; private MediaSessionCompat mMediaSession; public MediaSessionManager(PlayService playService) { mPlayService = playService; setupMediaSession(); } private void setupMediaSession() { mMediaSession = new MediaSessionCompat(mPlayService, TAG); mMediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS | MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS); mMediaSession.setCallback(callback); mMediaSession.setActive(true); } public void updatePlaybackState() { int state = (mPlayService.isPlaying() || mPlayService.isPreparing()) ? PlaybackStateCompat.STATE_PLAYING : PlaybackStateCompat.STATE_PAUSED; mMediaSession.setPlaybackState( new PlaybackStateCompat.Builder() .setActions(MEDIA_SESSION_ACTIONS) .setState(state, mPlayService.getCurrentPosition(), 1) .build()); } public void updateMetaData(AudioBean music) { if (music == null) { mMediaSession.setMetadata(null); return; } MediaMetadataCompat.Builder metaData = new MediaMetadataCompat.Builder() .putString(MediaMetadataCompat.METADATA_KEY_TITLE, music.getTitle()) .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, music.getArtist()) .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, music.getAlbum()) .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ARTIST, music.getArtist()) .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, music.getDuration()) .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, CoverLoader.getInstance().loadThumbnail(music)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { metaData.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, BaseAppHelper.get().getMusicList().size()); } mMediaSession.setMetadata(metaData.build()); } public void release() { mMediaSession.setCallback(null); mMediaSession.setActive(false); mMediaSession.release(); } private MediaSessionCompat.Callback callback = new MediaSessionCompat.Callback() { @Override public void onPlay() { mPlayService.playPause(); } @Override public void onPause() { mPlayService.playPause(); } @Override public void onSkipToNext() { mPlayService.next(); } @Override public void onSkipToPrevious() { mPlayService.prev(); } @Override public void onStop() { mPlayService.stop(); } @Override public void onSeekTo(long pos) { mPlayService.seekTo((int) pos); } }; }