2012-05-04 18 views
4

我有一個AlertDialog,其中停止播放我點擊了當的聲音,但在某些設備上看起來調用onStop()拋出IllegalStateException,但是爲什麼呢?MediaPlayer的拋IllegalStateException異常調用的onStop()時

如果對話框打開,表示聲音正在播放,所以應該是音頻未播放的情況。

現在我用try catch包圍它,但是會造成這種情況呢?

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

@ Deepak-問題和答案是一樣的原因? –

3

顯然mp沒有初始化,Dev Resource;

嘗試增加:

if(mp != null) 
+1

不要讓它覺得它不會被初始化,因爲它在播放之前被初始化。不是說你錯了只是說它沒有意義,它不是 – tyczj

+0

@ Sam-當設備是靜音模式時,我有一個問題,但是播放器已經啓動,那麼我打電話if(player!= null){player.stop();} player.reset(); player.release(); player = null; }在這種情況下得到了非法異常請看看它爲什麼發生 –

14

檢查mp != null防止NullPointerExceptionIllegalStateException不能被引起。

您得到該錯誤的原因是玩家處於無法使用stop()的狀態。如果您查看MediaPlayer documentation頂部的狀態圖,則可以看到只有在玩家處於Prepared狀態後才能調用停止。下一種可能性是您已經撥打release()reset(),這也會導致該錯誤。

只能在PreparedStartedPausedPlaybackCompleteStopped狀態致電stop()。所有其他狀態產生該錯誤。

因此,您要麼prepareAsync()和用戶在您的播放器準備好之前點擊按鈕,或者您有代碼釋放或重置播放器,然後再按下按鈕。

0

檢查mp!= null防止它爲空時,但您的mediaplayer永遠不會爲空。 只需加上mp = null;你在哪裏做mp.stop();

相關問題