您的位置:首页 > 移动开发 > Android开发

android 利用 MediaPlayer 类播放音乐

2014-06-17 21:46 453 查看
写在前面---学渣认为,学习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状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: