Android 将MediaPlayer重置为按下状态
我想在按下后退按钮(onBackPressed)时取消当前Android MediaPlayer URL的加载,并退出到之前的活动,就好像什么都没有一样。 所有这些都是在活动加载时发生的。 onCreate有一个ProgressDialog调用。我想取消此对话框,取消创建/启动MediaPlayer并返回 如何正确制作Android 将MediaPlayer重置为按下状态,android,android-mediaplayer,progressdialog,back,Android,Android Mediaplayer,Progressdialog,Back,我想在按下后退按钮(onBackPressed)时取消当前Android MediaPlayer URL的加载,并退出到之前的活动,就好像什么都没有一样。 所有这些都是在活动加载时发生的。 onCreate有一个ProgressDialog调用。我想取消此对话框,取消创建/启动MediaPlayer并返回 如何正确制作 @Override public void onBackPressed() { if (pd!=null) {if (mp3Service!=null) mp3Service
@Override
public void onBackPressed() {
if (pd!=null) {if (mp3Service!=null) mp3Service.reset(getApplicationContext()); pd.onBackPressed();};
super.onBackPressed();
}
这不起作用,而且,在一段时间内,屏幕开始变暗并挂起应用程序
怎么了,也许我必须打另一条线?(playSong在单独的线程中启动)。您可以尝试检查对话框中的
OnCancelListener
,以检测对话框是否已取消。或者你可以试试这样的
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
//Do your code here for canceling your service
return true;
}
return super.onKeyDown(keyCode, event);
}
创建对话框时,可以添加取消侦听器:
pd.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// TODO cancel your music service
}
})
如果进度对话框可见,则需要重写其onBackPressed方法来处理事件:
pd = new ProgressDialog(this) {
public void onBackPressed() {
dismiss();
mediaPlayer.stop();
}
};
pd.setTitle("Loading");
pd.setMessage("Please Wait..");
pd.setIndeterminate(true);
pd.setCancelable(false);
pd.show();
谢谢它不起作用。即使是简单的吐司。当ProgressDialog处于活动状态时,按back不会触发Toast(如果要测试此功能)。仅取消对话框尝试将取消侦听器添加到您的对话框(刚刚更新了我的答案)谢谢。除了转到上一个屏幕后音乐开始播放之外,它几乎完成了所需的功能。停止()崩溃(NullPointerException),.reset()和.release()也不会取消要加载的音乐。因此,您可以回击,取消对话框,停止媒体播放器并转到上一个活动。。但是你有空指针吗。。堆栈跟踪是什么样子的?我稍后再放。可能必须将stop()更改为reset()?-如果播放器正在初始化,这可能会导致错误。状态图非常有用。如果在ui线程上调用prepareAsync,请确保您使用的是prepareAsync。我在服务的onDestroy中添加了if(mplayer!=null),null指针消失了。但是音乐不会停止。