★ 掌握如何控制相机拍照
10.1 播放音频与视频
教学录像:光盘\TM\lx\10\播放音频与视频.exe
Android提供了对常用音频和视频格式的支持,它所支持的音频格式有MP3(.mp3)、3GPP(.3gp)、Ogg(.ogg)和WAVE(.ave)等,支持的视频格式有3GPP(.3gp)和MPEG-4(.mp4)等。通过Android API提供的相关方法,在Android中可以实现音频与视频的播放。下面将分别介绍播放音频与视频的不同方法。
10.1.1 使用MediaPlayer播放音频
在Android中,提供了MediaPlayer类来播放音频。使用MediaPlayer类播放音频比较简单,只需要创建该类的对象,并为其指定要播放的音频文件,然后调用该类的start()方法即可,下面进行详细介绍。
1. 创建MediaPlayer对象,并装载音频文件
创建MediaPlayer对象并装载音频文件,可以使用MediaPayer类提供的静态方法create()来实现,也可以通过其无参构造方法来创建并实例化该类的对象来实现。
MediaPlayer类的静态方法create()常用的语法格式有以下两种。
[√]create(Context context, int resid)
用于从资源ID所对应的资源文件中装载音频,并返回新创建的MediaPlayer对象。例如,要创建装载音频资源(res/raw/d.wav)的MediaPlayer对象,可以使用下面的代码:
MediaPlayer player=MediaPlayer.create(this, R.raw.d);
[√]create(Context context, Uri uri)
用于根据指定的URI来装载音频,并返回新创建的MediaPlayer对象。例如,要创建装载了音频文件(URI地址为http://mingribook/sound/bg.mp3)的MediaPlayer对象,可以使用下面的代码:
MediaPlayer player=MediaPlayer.create(this, Uri.parse("http://mingribook/sound/bg.mp3"));
说明: 在访问网络中的资源时,要在AndroidManifest.xml文件中授予该程序访问网络的权限,具体的授权代码如下:
在通过MediaPlayer类的静态方法create()来创建MediaPlayer对象时,已经装载了要播放的音频,而使用无参的构造方法来创建MediaPlayer对象时,需要单独指定要装载的资源,这可以使用MediaPlayer类的setDataSource()方法实现。
在使用setDataSource()方法装载音频文件后,实际上MediaPlayer并未真正装载该音频文件,还需要调用MediaPlayer的prepare()方法去真正装载音频文件。使用无参的构造方法来创建MediaPlayer对象并装载指定的音频文件,可以使用下面的代码:
MediaPlayer player=new MediaPlayer();
try {
player.setDataSource("/sdcard/s.wav"); //指定要装载的音频文件
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
player.prepare(); //预加载音频
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
2. 开始或恢复播放
在获取到MediaPlayer对象后,就可以使用MediaPlayer类提供的start()方法来开始播放或恢复已经暂停的音频的播放。例如,已经创建了一个名称为player的对象,并且装载了要播放的音频,可以使用下面的代码播放该音频:
player.start(); //开始播放
3. 停止播放
使用MediaPlayer类提供的stop()方法可以停止正在播放的音频。例如,已经创建了一个名称为player的对象,并且已经开始播放装载的音频,可以使用下面的代码停止播放该音频:
player.stop(); //停止播放
4. 暂停播放
使用MediaPlayer类提供的pause()方法可以暂停正在播放的音频。例如,已经创建了一个名称为player的对象,并且已经开始播放装载的音频,可以使用下面的代码暂停播放该音频:
player.pause(); //暂停播放
例10.1 在Eclipse中创建Android项目,名称为10.1,实现包括播放、暂停/继续和停止功能的简易音乐播放器。(实例位置:光盘\TM\sl\10\10.1)
(1)将要播放的音频文件上传到SD卡的根目录中,这里要播放的音频文件为ninan.mp3。
(2)修改新建项目的res\layout目录下的布局文件main.xml,在默认添加的线性布局管理器中添加一个水平线性布局管理器,并在其中添加3个按钮控件,分别为“播放”、“暂停/继续”和“停止”按钮,具体代码请参见光盘。
(3)打开默认添加的MainActivity,在该类中,定义所需的成员变量,具体代码如下:
private MediaPlayer player; //MediaPlayer对象
private boolean isPause = false; //是否暂停
private File file; //要播放的音频文件
private TextView hint; //声明显示提示信息的文本框
(4)在onCreate()方法中,首先获取布局管理器中添加的“播放”按钮、“暂停/继续”按钮、“停止”按钮和显示提示信息的文本框,然后获取要播放的文件,最后判断该文件是否存在,如果存在,则创建一个装载该文件的MediaPlayer对象;否则,显示提示信息,并设置“播放”按钮不可用,关键代码如下:
final Button button1 = (Button) findViewById(R.id.button1); //获取“播放”按钮
final Button button2 = (Button) findViewById(R.id.button2); //获取“暂停/继续”按钮