0

Я пытаюсь запустить beeb звук непрерывно, пока пользователь не нажал кнопку. Я добавил файл alarm.mp3 в raw folder. Но этот файл мультимедиа не выполняется. Я получаю IllegalStateException.IllegalStateException в Android MediaPlayer исполнении

Это мой код:

MediaPlayer mp = new MediaPlayer(); 
try{ 
      mp.release(); 
      mp = MediaPlayer.create(this,R.raw.alarm); 

      mp.prepare(); 
      mp.setVolume(1f, 1f); 
      mp.setLooping(true); 
      mp.start(); 

     }catch(IllegalStateException e){ 
      System.out.println("Test Exception "+e); 

     }catch (IOException e) { 
      // TODO: handle exception 
      System.out.println("Test Exception "+e); 
     } 

Я добавил, что mp3 файл asset folder и попытаться воспроизвести его, но до сих пор я получаю же исключение.

Это код, который я использовал:

MediaPlayer mp = new MediaPlayer(); 
try{ 
       mp.release(); 
       AssetFileDescriptor afd=context.getAssets().openFd("alarm.mp3s"); 
       mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
       mp.prepare(); 
       mp.setVolume(1f, 1f); 
       mp.setLooping(true); 
       mp.start(); 

      }catch(IllegalStateException e){ 
       System.out.println("Test Exception "+e); 

      }catch (IOException e) { 
       // TODO: handle exception 
       System.out.println("Test Exception "+e); 
      } 

Любая помощь будет appriciated. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

UPDATE:

try{ 
       mp = MediaPlayer.create(context,R.raw.alarm); 
       mp.setVolume(1f, 1f); 
       mp.setLooping(true); 
       mp.start(); 

      }catch(IllegalStateException e){ 
       System.out.println("Test Exception "+e); 

      } 

Когда пользователь нажимает на кнопку:

mp.stop(); 
     if(!mp.isPlaying()){ 
       mp.release(); 
     } 

Это исключение:

10-04 12:50:06.105: I/System.out(14074): Test Exception java.lang.IllegalStateException 
+0

После того, как 'release()' вызывается 'MediaPlayer', использовать нельзя. Вызовите метод, когда вы полностью закончите работу с MediaPlayer, и его ресурсы больше не нужны. – Onik

+0

запишите и опубликуйте _full_ stacktrace, а не только эту короткую строку. – njzk2

ответ

1

Не видя StackTrace, подмигнули только предположение , Но вы прямо звоните

mp.release(); 

сразу после того, как вы создали один. Во-вторых, вы создаете mediaPlayer с new MediaPlayer()И с create(). Вам не нужно new MediaPlayer(), если вы используете create() и с методом mp.create(), вам не нужно звонить prepare(). Я хотел бы попробовать это так:

mp = MediaPlayer.create(this,R.raw.alarm);    
    mp.setVolume(1f, 1f); 
    mp.setLooping(true); 
    mp.start(); 

И просто позвоните release если MediaPlayer закончена. Как описано в API, после release(), то MediaPlayer в конечном состоянии:

После того, как объект MediaPlayer находится в состоянии End, он больше не может быть используется и нет никакого способа, чтобы вернуть его к любое другое государство.

Вы должны следовать API, я знаю, что это много, чтобы читать, но очень важно знать все о MediaPlayer.

+0

Спасибо за вашу поддержку. Я сделал изменения, которые вы предложили, но все же я получаю такое же Исключение. –

+0

, то, пожалуйста, отредактируйте опубликованный код и, пожалуйста, напишите свой стек и укажите строку, где происходит ошибка. – Opiatefuchs

+0

Я обновил вопрос. Трудно получить всю трассировку стека. Я работаю над большим проектом и не могу найти соответствующую часть. –