项目要求
基于Broadcast,BroadcastReceiver等与广播相关的知识实现简单的音乐播放功能,包括音乐的播放、暂停、切换、进度选择、音量调整。
设计效果
(进度条时间刷新功能还没有实现)
实现思路
- 音乐服务端负责播放音乐和收发广播的功能。当音乐服务端作为接收器时,只能接收到主页面广播的控制消息;作为发送器时,向主页面发送歌曲信息更新的消息
- 主页面负责进度条以及音量按钮的监听,同时也有收发广播的功能。当主页面作为接收器时,只能接收到音乐服务端广播的歌曲信息更新的消息;作为发送器时,向音乐服务端发送对歌曲播放的控制消息。
项目结构图
主要代码
1 主页面
package com.example.dell.musicbox3;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener
{
// 获取界面中显示歌曲标题、作者文本框
TextView title, author;
// 播放/暂停、停止按钮
ImageButton play, next, last;
// 声明音量管理器
public AudioManager mAudioManager = null;
// 定义进度条
public static SeekBar audioSeekBar = null;
// 定义音量大小
public SeekBar audioVolume = null;
ActivityReceiver activityReceiver;
public static final String CTL_ACTION = "org.crazyit.action.CTL_ACTION";
public static final String UPDATE_ACTION = "org.crazyit.action.UPDATE_ACTION";
// 定义音乐的播放状态,0x11代表没有播放;0x12代表正在播放;0x13代表暂停
int status = 0x11;
String[] titleStrs = new String[] {
"龙卷风", "可爱女人", "星晴" };
String[] authorStrs = new String[] {
"JayChou", "JayChou", "JayChou" };
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.layout);
// 获取程序界面界面中的两个按钮
play = (ImageButton) this.findViewById(R.id.play);
last = (ImageButton) this.findViewById(R.id.last);
next = (ImageButton) this.findViewById(R.id.next);
audioVolume = (SeekBar) findViewById(R.id.seekBar2);
audioSeekBar = (SeekBar) findViewById(R.id.seekBar1);
title = (TextView) findViewById(R.id.title);
author = (TextView) findViewById(R.id.author);
// 为两个按钮的单击事件添加监听器
play.setOnClickListener(this);
last.setOnClickListener