如何正确发布Android MediaPlayer

dac*_*bot 14 java android

我正在尝试在我的Android应用程序中添加一个按钮,当按下按钮时它会播放MP3.我已经让它工作了,但没有办法释放mediaPlayer对象 - 因此它在我离开活动后仍然继续播放.如果我在react()方法之外初始化MediaPlayer对象(按下按钮时会调用它),这会导致应用程序在打开活动时强制关闭.但是如果我在react()方法中初始化MediaPlayer,那么我就不能在onQuit()方法中使用mplayer.release.我在这里看不到什么?

    public void react(View view) {
    MediaPlayer mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord);
    mediaPlayer.start();
}
protected void onStop(){
    mediaPlayer.release();
    mediaPlayer = null;
}
Run Code Online (Sandbox Code Playgroud)

因显而易见的原因不起作用

MediaPlayer mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord);
public void react(View view) {
            mediaPlayer.start(); 
}
protected void onStop(){
    mediaPlayer.release();
    mediaPlayer = null;
}
Run Code Online (Sandbox Code Playgroud)

使它强制关闭.

更新: 这是整个java类.

public class ToBeOrNot extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_to_be_or_not);

        }
MediaPlayer mediaPlayer;

public void react(View view) {
        mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord);
        mediaPlayer.start(); 
}
protected void onStop(){
    mediaPlayer.release();
    mediaPlayer = null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    //getMenuInflater().inflate(R.menu.activity_to_be_or_not, menu);
    // Locate MenuItem with ShareActionProvider
   return true;
}

}
Run Code Online (Sandbox Code Playgroud)

我认为它的作用是相对自我解释的.当被调用时,它会显示一些文本和一个按钮,当点击时开始播放录音.当有人按下后退按钮时,它应该返回上一个活动并停止录制.谢谢你的帮助!

Geo*_*its 21

您无法在所有方法之外初始化mediaplayer对象.如果这样做,它会尝试使用尚未创建的上下文.您需要将其声明为类变量(在方法外部),并在其中初始化:

MediaPlayer mediaPlayer;

public void react(View view) {
    mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord);
    mediaPlayer.start(); 
}

protected void onStop(){
    mediaPlayer.release();
    mediaPlayer = null;
}
Run Code Online (Sandbox Code Playgroud)

另外,我建议阅读Java中的变量范围.