我有一个MediaPlayer对象作为类属性。
MediaPlayer mp;
然后我在onCreate方法中使用它们 -
mp = MediaPlayer.create(getApplicationContext(), R.raw.num1);
mp.start();
然后我尝试从我的一个按钮clicklistener中阻止它 -
btnBack = (Button) findViewById(R.id.btn1);
btnBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
stopSound();
startActivity(new Intent(Five.this, Four.class));
finish();
}
});
}
public void stopSound(){
if (mp != null) {
mp.release();
mp.stop();
}
}
但停止不起作用。
我做错了什么?
答案 0 :(得分:3)
您已经发布了MediaPlayer实例。它已经消失了。释放后,您无法在其上调用stop()。如果您打算恢复声音,只需删除release()调用即可。如果要销毁MediaPlayer(例如,稍后使用MediaPlayer.create()创建一个新的),请删除stop()调用。你应该仔细阅读this documentation; MediaPlayer类非常复杂。您需要了解不同的状态,何时可以,不能调用某些方法。
答案 1 :(得分:2)
在某些Android版本中,只有一些版本,我在一个应用程序流媒体广播中遇到类似的问题,它可以用它:
try{
if(mp!=null && mp.isPlaying()){
mp.stop();
}
mp.release();
mp=null;
mp = new MediaPlayer(); //I needed this, maybe you dont hac
}catch(Exception e){
e.printStackTrace();
System.out.println("I can't believe you get here !");
}
答案 2 :(得分:0)
你不能在停止之前调用释放
查看此处的生命周期http://developer.android.com/reference/android/media/MediaPlayer.html