gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:48:43 29 4
gpt4 key购买 nike

我正在开发音乐播放器应用程序,我正在使用 MediaPlayer 播放音乐。流媒体工作正常,但现在我想要如果用户按下 Activity 的后退按钮,那么它应该立即停止准备并释放媒体播放器。

目前,当它正在准备时,如果 Activity 正在被销毁,那么我将像这样释放 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();

最佳答案

检查答案 here .和 MediaPlayer State Diagram来自安卓代码。

编辑:

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

     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;
}
}

关于android - 如何在准备时释放媒体播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33340470/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com