我正在开发简单的Android应用程序,使用Media Player播放声音。它有一个按钮,触摸时播放声音。当我触摸后退按钮时;如果声音正在播放,则必须停止。如果声音没有播放(完成播放),它必须返回到之前的活动,但现在它崩溃了非法状态异常。提前谢谢。
这是按钮的代码。
SoundButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mp != null) {
mp.stop();
}
mp = MediaPlayer.create(getApplicationContext(),
R.raw.p3_x1_slow);
mp.reset();
try {
mp.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
mp.start();
}
});
这是我检测到后退按钮的地方
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (mp != null || mp.isPlaying()) {
Practice_3_detail.this.finish();
} else if (mp == null) {
finish();
} else if(mp != null && mp.isPlaying()){
//mp.pause();
finish();
} else
{
finish();
}
}
return true;
}
答案 0 :(得分:1)
请尝试以下代码。在完成当前活动之前,您必须停止媒体播放器并释放它的对象。
@覆盖
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)
{
if(mp != null)
{
mp.stop();
mp.release();
}
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}