Android 将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

我想在按下后退按钮(onBackPressed)时取消当前Android MediaPlayer URL的加载,并退出到之前的活动,就好像什么都没有一样。 所有这些都是在活动加载时发生的。 onCreate有一个ProgressDialog调用。我想取消此对话框,取消创建/启动MediaPlayer并返回

如何正确制作

@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指针消失了。但是音乐不会停止。