Android中使用MediaPlayer播放音乐状态转换

来源:互联网 发布:华晨宇全球歌迷会淘宝 编辑:程序博客网 时间:2024/04/29 05:53

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

十二、官网上状态转化图


     

      

      

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 教师体检来例假怎么办 老板拖欠农民工工资怎么办 公司破产拖欠员工工资怎么办 白玉蜗牛下蛋了怎么办 黄牛卖不出的票怎么办 鸡受风寒不产蛋怎么办 蛋鸡感冒不下蛋怎么办 牛肉煮老了怎么办 牛肉炖碎了怎么办 比值审敛法等于1怎么办 华为手机停止运行怎么办 易事通卡怎么办延期 三星手机照相机故障怎么办 凌晨一点到机场怎么办 凌晨3点醒来怎么办 凌晨四五点咳嗽怎么办 凌晨4点大便怎么办 熊猫小课付了费怎么办 华为手机系统升级后卡机怎么办 孕妇汗脚脚臭怎么办 巴基斯坦留学生丢失护照怎么办 vivox20耳机进水了怎么办 轴圆齿之间间隙大怎么办 浩辰cad2017保存不了怎么办 会议无poster版块怎么办 大四考研失败了怎么办 博士退学老师不同意怎么办? 贴双眼皮眼皮松怎么办 dpf灯亮了怎么办 60岁社保没交满怎么办 老公素质太差怎么办 耿彦波退休了太原怎么办 宫腔镜三天后同房了怎么办 开关失灵关不了怎么办 灯的开关关不掉怎么办? 身上毛孔粗大怎么办呀 脸被牙膏灼伤怎么办 wifi要登录认证怎么办 本科没有选导师怎么办 预授权撤销了怎么办 软件连不上网怎么办