Android 检测MediaBrowserServiceCompat是否正在运行

Android 检测MediaBrowserServiceCompat是否正在运行,android,android-mediaplayer,Android,Android Mediaplayer,我用它来构建一个MediaPlayer服务。我让它或多或少工作,但是如果用户返回到包含媒体控件的活动,我需要检测MediaPlayer处于什么状态。我当前使用的代码在onResume中抛出一个NullReferenceException错误,因为getPlaybackState()总是null 我对使用MediaSessionCompat很陌生,根据文档,我可以以某种方式获得当前会话: “创建会话后,会话所有者可以将其会话令牌传递给其他进程,以允许它们创建MediaControllerCompa

我用它来构建一个
MediaPlayer服务
。我让它或多或少工作,但是如果用户返回到包含媒体控件的
活动
,我需要检测
MediaPlayer
处于什么状态。我当前使用的代码在
onResume
中抛出一个
NullReferenceException
错误,因为
getPlaybackState()
总是
null

我对使用
MediaSessionCompat
很陌生,根据文档,我可以以某种方式获得当前会话:

“创建会话后,会话所有者可以将其会话令牌传递给其他进程,以允许它们创建MediaControllerCompat与会话交互。”


我无法通过可用的API找到一种方法,所以我只是跟踪通过本地存储(sqlite)播放的媒体,并通过它更新显示。可能不是最优雅的解决方案,但它很有效

    public class MediaActivity extends AppCompatActivity {

    private MediaBrowserCompat mMediaBrowserCompat;
    private MediaControllerCompat mMediaControllerCompat;
    private Activity mActivity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_media);

        mActivity = this;
        mPlayButton = (Button)findViewById(R.id.btn_play);

        mMediaBrowserCompat = new MediaBrowserCompat(
                getApplicationContext(),
                new ComponentName(mContext, MediaPlayerService.class),
                mMediaBrowserCompatConnectionCallback,
                getIntent().getExtras()
        );  

        mMediaBrowserCompat.connect();       

        mPlayButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if( mCurrentState == STATE_PAUSED ) {
                        getSupportMediaController().getTransportControls().play();
                        mCurrentState = STATE_PLAYING;
                        mPlayButton.setText("Pause");
                } else {
                    MediaControllerCompat.getMediaController(mActivity).getTransportControls().pause();
                    mCurrentState = STATE_PAUSED;
                    mPlayButton.setText("Play");
                }
            }
        });

        @Override
        public void onResume() {
            super.onResume();

            if (MediaControllerCompat.getMediaController(mActivity).getPlaybackState().getState() == PlaybackStateCompat.STATE_PLAYING) {
                mPlayButton.setText("Pause")
            }
            else{
                mPlayButton.setText("Play")     
            }

        }       

        private MediaBrowserCompat.ConnectionCallback mMediaBrowserCompatConnectionCallback = new MediaBrowserCompat.ConnectionCallback() {

            @Override
            public void onConnected() {
                super.onConnected();
                try {
                    mMediaControllerCompat = new MediaControllerCompat(PodcastEpisodeActivity.this, mMediaBrowserCompat.getSessionToken());
                    mMediaControllerCompat.registerCallback(mMediaControllerCompatCallback);
                    MediaControllerCompat.setMediaController(mActivity, mMediaControllerCompat);
                    MediaControllerCompat.getMediaController(mActivity).getTransportControls().playFromUri(Uri.parse("http://www.url.com"), extras);

                } catch( RemoteException e ) {
                    Log.e(mActivity.getPackageName(), e.toString());
                }
            }
        };


        private MediaControllerCompat.Callback mMediaControllerCompatCallback = new MediaControllerCompat.Callback() {

            @Override
            public void onPlaybackStateChanged(PlaybackStateCompat state) {
                super.onPlaybackStateChanged(state);

                if (state == null ) return;

                switch (state.getState()) {
                    case PlaybackStateCompat.STATE_PLAYING: {
                        mCurrentState = STATE_PLAYING;
                        break;
                    }
                    case PlaybackStateCompat.STATE_PAUSED: {
                        mCurrentState = STATE_PAUSED;
                        break;
                    }
                }
            }
        };
    }
}