我正在尝试在我的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;
}
由于显而易见的原因而无效
MediaPlayer mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord);
public void react(View view) {
mediaPlayer.start();
}
protected void onStop(){
mediaPlayer.release();
mediaPlayer = null;
}
使其强制关闭。
更新 这是整个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;
}
}
我认为它的作用是相对自我解释的。当被叫时,它会显示一些文字和一个按钮,当按下该按钮时开始播放录音。当有人按下后退按钮时,它应该返回上一个活动并停止录制。 谢谢你的帮助!
答案 0 :(得分:19)
您无法在所有方法之外初始化媒体播放器对象。如果这样做,它会尝试使用尚未创建的上下文。您需要将其声明为类变量(在方法之外),并在其中初始化:
MediaPlayer mediaPlayer;
public void react(View view) {
mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord);
mediaPlayer.start();
}
protected void onStop(){
mediaPlayer.release();
mediaPlayer = null;
}
此外,我建议您阅读variable scope in Java。
答案 1 :(得分:0)
这对我很有帮助。
public class MainActivity extends AppCompatActivity {
MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaPlayer = MediaPlayer.create(this, R.raw.beep_warning);
final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox);
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkBox.isChecked()) {
mediaPlayer.start();
mediaPlayer.setLooping(true);
}
else{
mediaPlayer.pause();
}
}
});
}
@Override
protected void onStop() {
super.onStop();
mediaPlayer.release();
}
答案 2 :(得分:0)
根据Google docs,您可以像以下示例一样在MediaPlayer
中实现侦听器。
完成后,您可以自动释放并重置。
MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_one);
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
mp.release();
mp=null;
}
});
mp.start();