我真的需要将MediaPlayer用作静态变量,但每次我尝试为其编写代码时,都会遇到不同的错误。没有办法解决它,因为我必须使用5个不同的MediaPlayer特定实例,然后在与首次创建实例的不同活动中的每个实例上调用stop()方法。这是必要的,因为我需要5个不同的mp3文件,需要在不同的时间在不同的活动中使用,但是它们必须全部停在一个活动中(一次只能播放一个,但我想编写代码来覆盖停止所有5,效率高。)
我已将活动1中的MediaPlayer声明为全局静态变量:public static MediaPlayer MP_GODZILLA = new MediaPlayer();
然后在页面下方,我收到mp3文件并启动它:
public void onFinish() {
mTextField.setText("ROAR!!");
// call some media function when timer is done
MP_GODZILLA.create(GodzillaThemedActivity.this, R.raw.godzilla_roar);
MP_GODZILLA.start();
// This disables the pause/play button when timer ends
Button disablePausePlay = (Button)findViewById(R.id.btnPause);
disablePausePlay.setEnabled(false);
}
然后,在一个单独的活动中,我需要检查这个mp3是否正在播放,如果是,那么我必须停止它:
btnStop = (Button)findViewById(R.id.btnStop);
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Since this uses the static variable mpGodzilla, must call it from original activity
if(GodzillaThemedActivity.MP_GODZILLA.isPlaying()){
GodzillaThemedActivity.MP_GODZILLA.stop();
}
}
});
但是当我运行它时它没有播放任何声音,MP_GODZILLA.start();
在某种程度上无效。相反,我得到了这个错误:
984-984/com.azurespot.disastertimer.app E/MediaPlayer﹕ start called in state 1
05-05 07:08:15.185 984-984/com.azurespot.disastertimer.app E/MediaPlayer﹕ error (-38, 0)
05-05 07:08:15.201 984-984/com.azurespot.disastertimer.app E/MediaPlayer﹕ Error (-38,0)
我做错了什么?感谢。