【全】Android官网MediaPlayer章节翻译与总结(上)

1.    MediaPlayer一旦被创建(通过构造方法或者reset()方法),就进入空闲状态;当调用realease()后就进入结束状态。

*通过构造方法和reset()方法创建MediaPlayer有一个细微但很关键的区别。通过构造方法创建,如果在调用setDataSource()之前就调用了其他的改变状态的函数,运行时将会错误;通过reset()方法创建,这个错误将会被OnErrorListener.onError()方法捕获,且MediaPlayer会转换到Error状态

*MediaPlayer不再被使用时,请立即调用release()方法,释放内存,否则会造成程序异常

*MediaPlayer进入End状态后,将不能再被使用

*通过new 创建的MediaPlayer对象进入的是idle状态,通过create创建的进入的是prepared状态(自动执行了setDataSource()以及prepare())

2.读取音视频可能的错误:格式不对,分辨率太高,流读取超时等

*就算应用没有监听OnErrorListener,当出现上述错误时,MediaPlayer最终还是会进入Error状态

*如果出错了,可以在onErrorListener中调用reset()方法并在ui中进行错误提示

3.状态的转换有严格的顺序,如下图,如果没有按照这个顺序将会报IllegalStateException()


*调用setDataSource()方法时,需要处理异常IllegalArgumentException以及IOException

4.可以通过两种方法让MediaPlayer进入Prepared状态,一种是prepare()方法(同步的),一种是prepareAsync()方法(异步的,在另一个线程中),当prepare()方法return时或者当parepareAsync()执行完毕时,都会进入OnPreaparedListener.onPrepared()方法(如果你设置了该监听的话)

       preparing是调用prepareAsync()时的一个临时的状态

       在prepared状态中,音视频声音的大小、播放时屏幕的大小等属性都可以通过一定的方法更改

5.isPlaying可以用来测试MediaPlayer是否在started状态

       处于started状态时,可以调用——

OnBufferingUpdateListener.onBufferingUpdate()来跟踪流读取音视频的缓冲数据

       如果MediaPlayer已经处于started状态,再调用start()没有影响

6.paused状态与started状态可以相互转换,并且这个转换是异步的,且需要耗费几秒的时间

       如果MediaPlayer已经处于paused状态,再调用pause()没有影响

7.stopped状态可以从started、paused、prepared、playbackCompleted状态转换过来

       一旦MediaPlayer转换到了stopped状态,只有通过prepare()以及prepareAsync()让MediaPlayer进入prepared状态

       如果MediaPlayer已经处于stopped状态,再调用stop()没有影响

8. 调用seekTo()方法可以调整播放的位置

       seekTo(int)方法是异步执行的,所以它可以马上返回,但是实际的定位播放操作可能需要一段时间才能完成,尤其是播放流形式的音频/视频。当实际的定位播放操作完成之后,内部的播放引擎会调用客户端程序员提供的OnSeekComplete.onSeekComplete()回调方法。可以通过setOnSeekCompleteListener(OnSeekCompleteListener)方法注册。

注意,seekTo(int)方法也可以在其它状态下调用,比如Prepared,Paused和PlaybackCompleted状态。此外,目前的播放位置,实际可以调用getCurrentPosition()方法得到,它可以帮助如音乐播放器的应用程序不断更新播放进度

9. 当播放到流的末尾,播放就完成了。

如果调用了setLooping(boolean)方法开启了循环模式,那么这个MediaPlayer对象会重新进入Started状态。

若没有开启循环模式,那么内部的播放引擎会调用客户端程序员提供的OnCompletion.onCompletion()回调方法。可以通过调用MediaPlayer.setOnCompletionListener(OnCompletionListener)方法来设置。内部的播放引擎一旦调用了OnCompletion.onCompletion()回调方法,说明这个MediaPlayer对象进入了PlaybackCompleted状态。

当处于PlaybackCompleted状态的时候,可以再调用start()方法来让这个MediaPlayer对象再进入Started状态。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值