我正在使用音乐播放器应用,我正在使用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();
答案 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;
}
}