如何在准备时释放媒体播放器

时间:2015-10-26 07:26:01

标签: android media-player

我正在使用音乐播放器应用,我正在使用MediaPlayer进行音乐流式传输。流媒体工作正常,但现在我想要如果用户按下活动的后退按钮,那么它应该停止准备&立即发布媒体播放器。

目前,当它正在准备并且活动正在被销毁时,我正在释放MediaPlayer这样但是当它释放它然后它挂起应用程序&显示ANR。

@Override
protected void onDestroy() {
    super.onDestroy();
    if(mediaPlayer!=null) {
        mediaPlayer.stop();
        mediaPlayer.release();
    }
}

我正在初始化MediaPlayer,如下所示

mediaPlayer = null;
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource("http://www.samisite.com/sound/cropShadesofGrayMonkees.mp3");

现在我想要当它在onDestory发布时开始准备,然后它应该不会挂起应用程序&顺利发布媒体播放器。

请帮助我,这是最好的方法。提前致谢     mediaPlayer.prepareAsync();

1 个答案:

答案 0 :(得分:1)

检查答案here。来自android代码的MediaPlayer State Diagram

编辑:

@TGMCians我向他展示了提供的链接,因此,如果播放仍未准备就绪或正在准备,他将无法拨打stop(),直到它被称为onPrepared。我不确定onPrepared是否会在应用onDestroy调用后继续调用。所以,我认为完整的剪辑是:

     private boolean mPrepared = false;
     private boolean mCancel = false;
        public void onPrepared(MediaPlayer player){
            mPrepared = true;
            if(mCancel){
                player.release();
                mPrepared = false;
                mCancel = false;
                //nullify your MediaPlayer reference
                mediaPlayer = null;
            }
        }
        private void cancelMedia(){
            mCancel = true;
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
            cancelMedia();
            if (mediaPlayer != null && mPrepared) {
                mediaPlayer.stop();
                mediaPlayer.release();
                mPrepared = false;
                mediaPlayer = null;
            }
        }