一、MediaPlayer
一个播放音频与视频文件声音的类。示例:
1.播放本地文件
把文件存于res/raw/目录下:
MediaPlayer mMediaPlayer = MediaPlayer.create(this, R.raw.no_left); mMediaPlayer.start();
把文件存于assets目录下:
MediaPlayer mMediaPlayer = new MediaPlayer(); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); AssetFileDescriptor afd = getAssets().openFd("no_left.mp3"); mMediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); afd.close(); mMediaPlayer.prepare(); mMediaPlayer.start();
2.播放网络文件
String url = "http://192.168.0.103:8080/test/从没离开.mp3"; mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setDataSource(url); mMediaPlayer.prepare(); mMediaPlayer.start();
3.方法说明
(1)create(Context context, Uri uri)与create(Context context, int resid)
两个静态方法,返回已经准备好了的MediaPlayer对象。
(2)setDataSource(String path)
设置准备播放的资源,path可以是本地文件路径或者网络文件地址。
(3)setDataSource(Context context, Uri uri)
与上类似。
(4)setDataSource(FileDescriptor fd)与setDataSource(FileDescriptor fd, long offset, long length)
用一个5分钟的音频文件测试,发现第一个方法比第二个方法播放的时间多出来一半多点。第二个是正常时间。
(5)prepare()与prepareAsync()
做播放前的准备,第二个方法时异步的。播放网络文件时这个时间可能会比较长,为了不阻塞主线程,这个操作需要放到其他线程,可以用第一个方法,放到子线程。也可以在主线程用第二个方法。
(6)setAudioStreamType(int streamtype)
设置音频类型,必须在prepare() 或 prepareAsync() 之前,参数定义在AudioManager中。发现不设置也没影响,不知道有什么用。
(7)start() 与 stop() 及 pause()
开始播放、停止播放、暂停播放。
(8)reset() 与 release()
重置 与 释放资源。
(9)isLooping() 与 isPlaying()
是否循环播放 与 是否正在播放
(10)seekTo(int msec)
跳转到指定时间点播放。
(11)setLooping(boolean looping)
设置是否循环播放。
(12)getDuration() 与 getCurrentPosition()
获取音频播放时间长度 与 获取当前播放位置
(13)还有各种监听与与Vidio有关的方法。
播放过程状态图如下:
二、AsyncPlayer
一个一般用于播游戏背景音乐的类。这个类其实是用MediaPlayer播放的。
(1)play(Context context, Uri uri, boolean looping, int stream)
播放声音,第四个参数为音频类型,比如AudioManager.STREAM_MUSIC。
(2)stop()
停止播放,释放资源。