问题描述
我正在使用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楼
在检查答案。 以及来自Android代码的 。
编辑:
@TGMCians我向他展示了所提供的链接,因此,如果播放仍未准备就绪或准备就绪,他将无法调用stop()
直到调用onPrepared
。
我不确定在应用程序onDestroy
调用之后onPrepared
继续调用。
因此,我认为的完整片段是:
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;
}
}