今天本文介绍的是Andriod系统自带的Mediaplayer,和VideoView实现简单的音乐和视频的播放,至于想做出如酷狗音乐这样的APP的话,只要想做,应该也不难,都是基于此实现了功能的扩展。
Android的MediaPlayer包含了Audio和Video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer来实现的。
一、播放音频文件
首先看看MediaPlaer的生命周期
下面是MediaPlayer提供的常用方法
方法 | 说明 |
---|---|
MediaPlayer | 构造方法 |
create | 创建一个要播放的多媒体 |
getCurrentPosition | 得到当前播放位置 |
getDuration | 得到文件的时间 |
getVideoHeight | 得到视频的高度 |
getVideoWidth | 得到视频的宽度 |
isLooping | 是否循环播放 |
isPlaying | 是否正在播放 |
pause | 暂停 |
prepare | 准备(同步) |
prepareAsync | 准备(异步) |
release | 释放MediaPlayer对象相关的资源 |
reset | 重置MediaPlayer对象为刚刚创建的状态 |
seekTo | 指定播放的位置(以毫秒为单位的时间) |
setAudioStreamType | 设置流媒体的类型 |
setDataSource | 设置多媒体数据来源(位置) |
setDisplay | 设置用SurfaceHolder来显示多媒体 |
setLooping | 设置是否循环播放 |
setOnButteringUpdateListener | 网络流媒体的缓冲监听 |
setOnErrorListener | 设置错误信息监听 |
setOnVideoSizeChangedListener | 视频尺寸监听 |
setScreenOnWhilePlaying | 设置是否使用SurfaceHolder来保持屏幕显示 |
setVolume | 设置音量 |
start | 开始播放 |
stop | 停止播放 |
MediaPlayer的工作流程是这样的:
1、首先创建MediaPlaer对象;
2、然后调用setDataSource()方法来设置音频文件的路径;
3 、再调用prepare()方法使MediaPlayer进入到准备状态;
4 、调用start方法就可以播放音频。
创建MediaPlaer对象有两种方式
1、直接new出来
MediaPlayer mp = new MediaPlayer();
2、使用create方式
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了
当然上面首先得在res文件夹下新建raw文件夹,并放置一个test文件
设置播放的文件
MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:
MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:
mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
例如:
mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");
MediaPlayer的setDataSource一共四个方法:
setDataSource (String path)
setDataSource (FileDescriptor fd)
setDataSource (Context context, Uri uri)
setDataSource (FileDescriptor fd, long offset, long length)
其中使用FileDescriptor时,需要将文件放到与res文件夹平级的assets文件夹里,然后使用:
AssetFileDescriptor fileDescriptor = getAssets().openFd("rain.mp3");
m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());
下面是实现代码
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/play"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="播放" />
<Button
android:id="@+id/pause"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="暂停" />