写在前面---学渣认为,学习android需要上官网学习,本博客也是根据官网的内容所写的,如果有误,请不吝赐教。。。
在android中,利用MediaPlayer类进行播放音乐,MediaPlayer的详细信息在这里,而这个类又是利用一个状态图来对音频或视频的播放进行控制,这个状态图如下所示:
学渣第一次看到这个图给跪了,这么复杂啊,其实做人呢,最重要的是开心,这个图呢,看着看着就变简单了,大家可以把一个mediaPlayer对象相像成一台cd机。
各状态解读:
1 Idle(空闲状态)
刚买了一个cd机,就是处于空闲状态喽。
当new了一个MediaPlayer对象时,或者使用reset后处于Idle状态,而且new一个对象和使用reset后的Idle状态有所不同,这两种方法的一个重要差别就是:如果在这个状态下调用了getDuration()等方法(相当于调用时机不正确),通过reset()方法进入idle状态的话会触发OnErrorListener.onError(),并且MediaPlayer会进入Error状态;如果是新创建的MediaPlayer对象,则并不会触发onError(),也不会进入Error状态。学渣对这个理解不是特别深刻,不太明白为什么要分这两种情况,希望大家有会的指导一下。
setDataSource():
设定一个音频或视频的路径。可以使一个MediaPlayer对象从Idle进入到Initialized状态。
在任何非Idle状态调用setDataSource()都会抛出IllegalStateException异常。
2 End状态
使用release()后,释放资源。在mediaplayer对象使用后,建议使用realease()立刻释放资源。
3 Error 状态
在播放的时候由于各种不同的原因会出现错误,进入error状态,比如格式不支持等原因,在出错后要及时补救,可以注册一个OnErrorListener()。有如下需要注意的:
1)在播放时,一旦出错,进入error状态
2)在error状态,可以通过reset进行重设,进入Idle状态
3)最好注册一个OnErrorListener()
4)如果在不合法的状态使用prepare()等函数时,会抛出一个IllegalStateException异常,通过捕获这个异常可以防止程序进入Error状态。
4 prepared状态
在播放开始之前必须进入prepared状态,即一定要准备好啊。。。。
有两种方法进入prepared状态,prepare()和prepareAsync(),可以注册一个setOnPreparedListener来监听prepared状态,当进入到prepared状态后会调用该接口里的函数。
5 started状态
在这个状态中就是播放状态喽,你的歌曲就会一直播放了。
isPlaying():可以检测MediaPlayer对象是否在started状态。
seekTo(int):可以调节播放的位置。在prepared状态也可以调用seekTo()。可以注册一个setOnSeekCompleteListener来对调节位置后进行调用。单位是毫秒。
setLooping(true):设置循环播放。
getCurrentPosition():
6 paused状态
暂停状态,在这个状态可以通过start(),重新播放,即进入started状态。
7 stoped状态
停止状态,可以重新prepare进入prepared状态
8 PlaybackCompleted状态
播放完毕,如果设置循环播放,会一直保持在started状态,否则stop,可以设置一个监听器setOnCompletionListener ,如果播放完毕进行调用。
可以调用start()重新进入started状态。