0

我試圖連續運行beeb聲音,直到用戶按下按鈕。我添加了alarm.mp3文件到raw folder。但是這個媒體文件沒有執行。我得到IllegalStateExceptionAndroid MediaPlayer執行中的IllegalStateException

這是我的代碼:

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

沒有看到堆棧跟蹤,it's只是一個假設。但你直接打電話

mp.release(); 

剛剛創建一個。第二個是你正在創建mediaPlayernew MediaPlayer()create()。如果您使用create()mp.create()方法,則不需要new MediaPlayer(),您無需致電prepare()。我會嘗試這樣的:

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

如果mediaPlayer完成,只需撥打release。像在API描述,release()之後,MediaPlayer處於結束狀態:

一旦MediaPlayer對象是在最終狀態時,它不再能夠 使用,並且沒有辦法把它回任何其他狀態。

您應該遵循API,我知道它有很多需要閱讀的內容,但瞭解關於MediaPlayer的所有內容非常重要。

+0

感謝您的支持。我改變了你的建議,但我仍然得到相同的例外。 –

+0

然後請編輯發佈的代碼,並請發佈您的堆棧跟蹤並指出錯誤發生的地方。 – Opiatefuchs

+0

我更新了這個問題。我很難得到整個堆棧跟蹤,我正在處理一個大項目並且找不到相關部分。 –

相關問題