无法播放两次声音,导致Android MediaPlayer
应用程序崩溃
mp = MediaPlayer.create(context, R.raw.audio1);
final ImageButton play = (ImageButton) findViewById(R.id.play_button_dua_seher);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (mp.isPlaying()) {
mp.stop();
mp.reset();
mp.release();
mp = MediaPlayer.create(context, R.raw.audio1);
}
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
final ImageButton stop = (ImageButton) findViewById(R.id.stop_button_dua_seher);
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mp != null)
{
mp.stop();
mp.reset();
mp.release();
}
}
});
Logcat
06-15 14:34:59.470 11697-11697/com.toptech.android.ramadanduas
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.toptech.android.ramadanduas, PID: 11697
java.lang.IllegalStateException
at android.media.MediaPlayer.isPlaying(Native Method)
at com.toptech.android.ramadanduas.duaseher$2.onClick(duaseher.java:53)
at android.view.View.performClick(View.java:5697)
at android.view.View$PerformClick.run(View.java:22526)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit
最佳答案
似乎问题出在单击停止按钮时,您在release()
实例上调用了MediaPlayer
,但是在(重新)开始播放时您没有检查它的状态。
这意味着您可以在已发布的isPlaying()
实例上调用MediaPlayer
,这将导致IllegalStateException
。
您应该以某种方式跟踪MediaPlayer
实例的状态(例如,带有boolean
标志),或者在发行后将其设置为null
,以便可以在之后执行null
值检查。
您可以执行以下操作:
// in your play button's onClick()
if (mp != null && mp.isPlaying()) { // check for null value also
mp.stop();
mp.reset();
} else {
mp = MediaPlayer.create(context, R.raw.audio1);
}
mp.start();
和
// in your stop button's onClick()
mp.release();
mp = null; // set it to null
关于android - 无法播放声音两次,Android MediaPlayer应用程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37831680/