2012-05-04 3 views
4

У меня есть AlertDialog, который перестает воспроизводить звук, когда я нажимал, но на некоторых устройствах кажется, что вызов onStop() вызывает IllegalStateException, но почему?MediaPlayer throwing IllegalStateException при вызове onStop()

Если диалог завершен, это значит, что звук воспроизводится, поэтому это должен быть случай, когда звук не воспроизводится.

Я уже сейчас нахожусь в пробке, но что это может вызвать?

alert.setPositiveButton("YES", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       try{ 
       mp.stop(); //error 
       mp.reset(); 
       mp.release(); 
       }catch(Exception e){ 
        Log.d("Nitif Activity", e.toString()); 
       } 
       v.cancel(); 

       popupMessage();     
       finish(); 
      } 
     }); 

ответ

1

Я думаю, вы могли бы быть выпустить медиаплеер, прежде чем executeing эти строки. Когда я получил эту ошибку я сделать, как это ниже надеюсь, что это решить вашу проблему ...

if(mp != null) { 
try{ 
     mp.stop(); //error 
     mp.reset(); 
     mp.release(); 
    }catch(Exception e){ 
     Log.d("Nitif Activity", e.toString()); 
     } 
} 
+2

Почему это принятый ответ, когда он даже не обращается к правильному виду Исключения ... @tyczj – SMT

+5

@ Дипак-вопрос и ответ одинаковы? –

3

Видимо mp не инициализирован, Dev Resource;

Попробуйте добавить:

if(mp != null) 
+1

, которые не понимают, что он не будет инициализирован, потому что он инициализируется прямо перед его воспроизведением. Не говори, что ты ошибаешься, просто сказал, что это не имеет смысла, потому что его не – tyczj

+0

@ Сэм. У меня вопрос, когда устройство работает в бесшумном режиме, но игрок уже начал, а затем я вызываю if (player! = Null) { player.stop(); player.reset(); player.release(); player = null; } в этом случае получил незаконное исключение, пожалуйста, посмотрите, почему это происходит –

14

Проверка mp != null предотвращает NullPointerException но IllegalStateException не может быть вызвано тем, что.

Причина, по которой вы получаете эту ошибку, состоит в том, что игрок находится в состоянии, в котором он не может stop(). Если вы посмотрите на диаграмму состояния в верхней части MediaPlayer documentation, вы увидите, что остановка может быть вызвана только после того, как игрок находится в состоянии Prepared. Следующая возможность заключается в том, что вы уже вызвали release() или reset(), что также приведет к этой ошибке.

Вы можете позвонить stop() только в Prepared, Started, Paused, PlaybackComplete или Stopped состоянии. Все остальные состояния производят эту ошибку.

Итак, вы либо делаете prepareAsync(), и пользователь нажимает кнопку до того, как ваш плеер подготовлен, либо у вас есть код, который освобождает или сбрасывает игрока до того, как вы нажмете кнопку.

0

Проверка mp! = Null предотвращает, когда оно равно null, но ваш медиаплеер никогда не уходит в нуль. просто добавьте mp = null; где вы делаете mp.stop();

Смежные вопросы