【问题标题】:How to release media player while preparing如何在准备时释放媒体播放器
【发布时间】:2015-10-26 18:24:25
【问题描述】:

我正在开发音乐播放器应用程序,我正在使用 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();

【问题讨论】:

  • 在停止并释放媒体播放器后尝试输入super.onDestroy();
  • @Lalit Poptani 我只是使用它但无法正常工作。应用程序仍然挂起。
  • 查看答案here。还有来自androidcode的MediaPlayer状态图。
  • @John 你能清楚在哪里设置 mCancel 标志为真吗?
  • @John onPrepared 在准备好播放后被调用,但他可能在准备好播放之前或准备时正在寻找。

标签: android media-player


【解决方案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;
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多