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()方法,进入结束状态。

十二、官网上状态转化图


     

      

      

猜你喜欢

转载自blog.csdn.net/yangshuangyue/article/details/59057840