第121页
}
(10)为MediaPlayer对象添加完成事件监听器,在重写的onCompletion()方法中调用nextMusic()方法播放下一首音乐,具体代码如下:
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
nextMusic(); //播放下一首
}
});
(11)分别为“上一首”按钮、“播放”按钮、“暂停/继续”按钮、“停止”按钮和“下一首”按钮添加单击事件监听器,并在重写的onClick()方法中,实现播放上一首、播放、暂停/继续播放、停止播放和播放下一首音频等功能,具体代码如下:
//为“上一首”按钮添加单击事件监听器
pre.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
preMusic(); //播放上一首
}
});
//为“播放”按钮添加单击事件监听器
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
playMusic(audioList.get(currentItem)); //调用playMusic()方法播放音乐
}
});
//为“暂停”按钮添加单击事件监听器
pause.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause(); //暂停音频的播放
((Button) v).setText("继续");
} else {
mediaPlayer.start(); //继续播放
((Button) v).setText("暂停");
}
}
});
//为“停止”按钮添加单击事件监听器
stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop(); //停止播放音频
}
pause.setEnabled(false); //设置“暂停”按钮不可用
}
});
//为“下一首”按钮添加单击事件监听器
next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
nextMusic(); //播放下一首
}
});
(12)重写Activity的onDestroy()方法,用于在当前Activity销毁时,停止正在播放的音频,并释放MediaPlayer所占用的资源,具体代码如下:
@Override
protected void onDestroy() {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop(); //停止音乐的播放
}
mediaPlayer.release(); //释放资源
super.onDestroy();
}
运行本实例,在屏幕中将显示获取到的音频列表,单击各列表项,可以播放当前列表项所指定的音乐;单击“播放”按钮,将开始播放音乐,并且“暂停”按钮变为可用,如图10.5所示;单击“暂停”按钮,将暂停音乐的播放,同时该按钮变为“继续”按钮;单击“停止”按钮,将停止播放音乐;单击“上一首”按钮,将播放上一首音乐;单击“下一首”按钮,将播放下一首音乐。
图10.5 播放SD卡上的全部音频文件
10.1.6 范例2:带音量控制的音乐播放器
例10.6 在Eclipse中创建Android项目,名称为10.6,实现带音量控制功能的音乐播放器。(实例位置:光盘\TM\sl\10\10.6)
说明: 本实例是在10.1.1节中的例10.1的基础上开发的,所以与其相同的部分这里就不再赘述。
(1)将要播放的音频文件上传到SD卡的根目录中,这里要播放的音频文件为ninan.mp3。如果已经将ninan.mp3文件上传到SD卡的根目录中,就不需要再重新上传了。
(2)打开res\layout目录下的布局文件main.xml,在水平线性布局管理器的结尾处添加一个TextView组件和一个拖动条组件,分别用于显示当前音量值和调整音量的拖动条,关键代码如下:
android:id="@+id/volume"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
android:text="当前音量:" />
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
说明: 这里的拖动条不用指定最大值和当前值,在后面的Java代码中,我们会为其指定,这样可以让拖动条的值与音量相关联。
(3)在onCreate()方法中,添加使用拖动条控制音量大小的代码。
//获取音频管理器类的对象
final AudioManager am = (AudioManager) MainActivity.this.getSystemService(Context.AUDIO_SERVICE);
//设置当前调整音量只是针对媒体音乐
MainActivity.this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
SeekBar seekbar = (SeekBar) findViewById(R.id.seekBar1); //获取拖动条
seekbar.setMax(am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)); //设置拖动条的最大值
int progress=am.getStreamVolume(AudioManager.STREAM_MUSIC); //获取当前的音量