Две вещи:
1. Отладьте сбой и посмотрите, где он происходит (какая строка).
2. Окружите весь оператор try / catch и просто поймайте Exception .
Если у вас есть исключение или лучшая идея о том, что ваш код дает сбой, тогда вам будет гораздо проще дать совет о том, как его исправить ... на самом деле, вам может даже не понадобиться совет по исправлению. это, вы можете решить проблему самостоятельно, и тогда вы пожнете плоды своего собственного успеха.
Обновление по комментариям:
Документация для MediaPlayer указывает, в чем может быть проблема, учитывая симптомы, которые видит OP:
Чтобы остановить воспроизведение, наберите stop()
. Если вы хотите позже воспроизвести медиа, то
Вы должны reset()
и prepare()
объект MediaPlayer
перед вызовом
start()
снова. (create()
звонит prepare()
в первый раз.)
Похоже, что если кнопка воспроизведения нажимается слишком много раз, то носитель может оказаться не в подготовленном состоянии и, таким образом, вызвать какое-то исключение. Идея отключения кнопки воспроизведения действительна, и она должна позаботиться об этой ситуации.
Вот некоторый иллюстративный код того, что вы хотите, чтобы ваша программа делала:
private OnClickListener btnMercyListener = new OnClickListener()
{
public void onClick(View v)
{
if(isPressed)
{
return;
}
isPressed = true;
// create your media player
mp = MediaPlayer.create(iMEvil.this,R.raw.mercy);
// set your listener
mp.setOnCompletionListener(mp.setOnCompletionListener(new OnCompletionListener(){
// @Override
public void onCompletion(MediaPlayer arg0) {
if(!isPressed)
{
return;
}
isPressed = false;
// re-enable your play button
playButton.enable();
// disable the pause button
pauseButton.disable();
mp.release();
mp.prepare();
}
}
);
// disable the play button
playButton.disable();
// enable the pause button
pauseButton.enable();
// start playback
mp.start();
}
};
Конечно, у вас должны быть соответствующие операторы try / catch, чтобы ваше приложение не зависало, но этот код должен дать вам общее представление о том, что делать.