Android中使用MediaPlayer播放音樂狀態轉換

一、MediaPlayer的狀態

       空閒、初始化、正在準備、已經準備、開始、暫停、停止、播放完成、出錯、結束。

二、空閒狀態

       1、在創建對象或者調用對象的reset()方法進入該狀態。

       2、在該狀態下,給對象設置了出錯監聽,調用對象的以下方法將會回調監聽裏面的onError()方法:getCurrentPosition(),getDuration(),getVideoHeight(),getVideoWidth(),setAudioStreamType(int),setLooping(boolean),setVolume(float, float),pause(),start(),stop(),seekTo(int),prepare() orprepareAsync();如果對象沒有調用reset方法,則狀態不發生變化,如果對象調用了reset()方法,則狀態回進入出錯狀態。

三、初始化狀態

       當對象在空閒狀態下,調用了對象的setDataSource()方法進入該狀態。

四、正在準備狀態

       1、 當對象在初始化狀態下,調用了對象的prepareAsync()方法進入該狀態;

       2、當對象在停止狀態下,調用了對象的prepareAsync()方法進入該狀態。

五、已經準備狀態

       1、當對象在初始化狀態下,調用了對象的prepare()方法進入該狀態;

       2、對象可以在正在準備狀態下,調用對象的onPreparedListener()方法,給該對象設置一個準備監聽,當準備完成之後,系統會會調用該監聽的onPrepared()方法,從而進入該狀態;

       3、當對象已經在該狀態下,調用了對象的seekTo()方法,狀態沒有發生改變;

       4、當對象在停止狀態下,調用了prepare()方法也會進入該狀態。

       5、使用靜態方法create()創建對象時,創建出來的對象就在該狀態。

六、開始狀態

      1、 當對象在已經準備的狀態下,調用了對象的start()方法進入該狀態;

      2、對象已經在該狀態下,調用seekTo()方法,或者再次調用了start()方法,狀態沒有發生改變。

      3、當對象已經在該狀態下,播放完成之後且Looping設置爲true時,狀態沒有發生改變。

      4、當對象在暫停狀態下,調用了start()方法進入該狀態。

      5、當對象在已經播放完成狀態下,調用了start()方法進入該狀態,音樂從頭播放。

      6、如果對象已經在開始狀態下,多次調用start()方法是沒有影響的。

七、暫停狀態

      1、當對象在開始狀態下,調用了pause()方法進入該狀態;

      2、當對象已經在該狀態下,調用了seekTo()方法或者再次調用了pause()方法,狀態沒有發生改變。

      3、當對象已經在暫停狀態下,多次調用pause()方法沒有影響。

八、停止狀態

      1、當對象在開始狀態下,調用了stop()方法進入該狀態;

      2、當對象在暫停狀態下,調用了stop()方法進入該狀態;

      3、當對象在準備完成狀態下,調用了stop()方法進入該狀態。

      4、當對象在播放完成狀態下,調用了stop()方法進入該狀態。

      5、當對象在停止狀態下,是不能再開始播放了,除非再次調用prepare()或者prepareAsync()方法進入準備狀態。

      6、當對象在停止狀態下,多次調用stop()方法是沒有影響的。

九、播放完成狀態

      1、當對象在開始狀態下,一直將音樂播放完成且是否循環播放設置爲false進入該狀態。

      2、已經在該狀態下,用戶調用了對象的seekTo()方法,狀態未發生改變,只是在調用了start()方法後,是從seekTo()設置的位置開始播放。

十、出錯狀態

     1、 給對象設置出錯監聽onErrorListener(),當回調onError()方法時,進入出錯狀態。

     2、即使沒有設置onErrorListener(),當錯誤發生時,也會進入出錯狀態。

     3、爲了能從出錯狀態恢復,可以調用對象的reset()方法,讓該對象進入空閒狀態。

     4、當對象在沒有在初始化狀態,停止狀態,正在準備狀態,或者已經準備狀態下,調用了prepare()或者prepareAsync()方法,程序會拋出IllegalStateException異常。

     5、如果不是在空閒狀態下調用了setDataSource()方法,則程序會拋出IllegalStateException異常。

十一、結束狀態

      當對象調用了release()方法,進入結束狀態。

十二、官網上狀態轉化圖


     

      

      

發佈了78 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章