在老师给的代码基础上做了一些改动
实验要求
- 音乐播放器添加音乐播放的 上一首 和 下一首 控制
- 将广播嵌入了服务
- 实现一些进阶功能:显示专辑封面、歌曲名称、歌手姓名和进度条
最终页面展示
实验步骤
- 布局文件
2.创建一个assets文件夹,放置音频
- JAVA文件里的主要方法
// 自定义的BroadcastReceiver,负责监听从Service传回来的广播
public class ActivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 获取Intent中的update消息,update代表播放状态
int update = intent.getIntExtra("update", -1);
// 获取Intent中的current消息,current代表当前正在播放的歌曲
int current = intent.getIntExtra("current", -1);
if (current >= 0) {
title.setText(titleStrs[current]);
author.setText(authorStrs[current]);
cover.setImageResource(covers[current]);
}
switch (update) {
case 0x11:
play.setImageResource(R.drawable.pause);
status = 0x11;
break;
// 控制系统进入播放状态
case 0x12:
// 播放状态下设置使用暂停图标
play.setImageResource(R.drawable.play);
// 设置当前状态
status = 0x12;
break;
// 控制系统进入暂停状态
case 0x13:
// 暂停状态下设置使用播放图标
play.setImageResource(R.drawable.pause);
// 设置当前状态
status = 0x13;
break;
case 0x14:
//设置使用停止图标
play.setImageResource(R.drawable.pause);
// 设置当前状态
status = 0x14;
break;
}
}
}
// 为MediaPlayer播放完成事件绑定监听器
mPlayer.setOnCompletionListener(new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp) {
current++;
MainActivity.audioSeekBar.setMax(0);
if (current >= 5) {
current = 0;
}
//发送广播通知Activity更改文本框
Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION);
sendIntent.putExtra("current", current);
// 发送广播,将被Activity组件中的BroadcastReceiver接收到
sendBroadcast(sendIntent);
// 准备并播放音乐
prepareAndPlay(musics[current]);
}
});
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
int control = intent.getIntExtra("control", -1);
switch (control) {
// 播放或暂停
case 1:
// 原来处于没有播放状态
if (status == 0x11) {
// 准备并播放音乐
prepareAndPlay(musics[current]);
status = 0x12;
}
// 原来处于播放状态
else if (status == 0x12) {
// 暂停
mPlayer.pause();
// 改变为暂停状态
status = 0x13;
}
// 原来处于暂停状态
else if (status == 0x13 || status == 0x14) {
// 播放
mPlayer.start();
// 改变状态
status = 0x12;
}
break;
// 停止声音
case 2:
// 停止播放
mPlayer.stop();
status = 0x14;
break;
case 3:
current++;
if(current < 0)
current = 0;
prepareAndPlay(musics[current]);
break;
case 4:
current++;
if(current > musics.length-1)
current = 0;
prepareAndPlay(musics[current]);
break;
}
// 广播通知Activity更改图标、文本框
Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION);
sendIntent.putExtra("update", status);
sendIntent.putExtra("current", current);
// 发送广播,将被Activity组件中的BroadcastReceiver接收到
sendBroadcast(sendIntent);
}
}
代码链接:添加链接描述