BroadcastReceiver的实例----基于Service的音乐播放器之一
下面的程序开发了一个基于Service的音乐盒,程序的音乐将会由后台运行的Service组件负责播放,当后台的播放状态发生改变时,程序将会通过发送广播通知前台Activity更新界面;当用户单击前台Activity的界面按钮时,系统将通过发送广播通知后台Service来改变播放状态。前台Activity打代码如下:
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;
public class MusicBox extends Activity implements OnClickListener{
	  //获取界面中显示歌曲标题、作者文本框
	  TextView title;
	  TextView author;
	  //播放、暂停按钮
	  ImageButton play;
	  ImageButton stop;
	  ActivityReceiver activityReceiver;
	  public static final String CTL_ACTION =
			        "broadcasttest.action.CTL_ACTION";
	  public static final String UPDATE_ACTION =
			        "broadcasttest.action.UPDATE_ACTION";
	  //定义音乐的播放状态,0x11代表没有播放,0x12代表正在播放,0x13代表暂停
	  int status = 0x11;
	  String[] titleStrs = new String[]{
			      "你是我最爱的人","又见山里红","我的好兄弟"
	    };
	  String[] authorStrs = new String[]{
			      "叶时伟","祁隆","庞龙"
	    };
  @Override
	  protected void onCreate(Bundle savedInstanceState) {
		    super.onCreate(savedInstanceState);
		    setContentView(R.layout.activity_main);
		    //获取程序界面中的两个按钮
		    play = (ImageButton) findViewById(R.id.play);
		    stop = (ImageButton) findViewById(R.id.stop);
		    title = (TextView) findViewById(R.id.title);
		    author = (TextView) findViewById(R.id.title);
		    //为两个按钮的单击事件绑定监听器
		    play.setOnClickListener(this);
		    stop.setOnClickListener(this);
		    activityReceiver = new ActivityReceiver();
		    //创建IntentFilter
		    IntentFilter filter = new IntentFilter();
		    //指定BroadcastReceiver监听的Action
		    filter.addAction(UPDATE_ACTION);
		    //注册BroadcastReceiver
		    registerReceiver(activityReceiver, filter);
		    Intent intent = new Intent(this, MusicService.class);
		    //启动后台Service
		    startService(intent);
	  }
  //自定义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]);
			      }
			      switch(update){
			        case 0x11:
				          play.setImageResource(R.drawable.play);
				          status = 0x11;
				          break;
			        //控制系统进入播放状态
			        case 0x12:
				          //播放状态下设置使用暂停图标
				          play.setImageResource(R.drawable.pause);
				          //设置当前状态
				          status = 0x12;
				          break;
			        //控制系统进入暂停状态
			        case 0x13:
				          //暂停状态下设置使用播放图标
				          play.setImageResource(R.drawable.play);
				          //设置当前状态
				          status = 0x13;
				          break;
			      }
		    }
}
  @Override
	  public void onClick(View v) {
		    // 创建Intent
		    Intent intent = new Intent("jww.broadcasttest.action.CTL_ACTION");
		    switch(v.getId()){
		      //按下播放/暂停按钮
		      case R.id.play:
			        intent.putExtra("control", 1);
			        break;
		      //按下停止按钮
		      case R.id.stop:
			        intent.putExtra("control", 2);
			        break;
		    }
		    //发送广播,将被Service组件中的BroadcastReceiver接收到
		    sendBroadcast(intent);
	  }
}
自定义的BroadcastReceiver代码段用于响应后台Service所发出的广播,该程序将会根据广播Intent里的消息来改变播放状态,并更新程序界面中按钮的图标:当正在播放时,显示暂停图标;当正在暂停时,显示播放图标。并根据传回来的current数据来更新title、author两个文本框所显示的文本-----显示当前正在播放的歌曲的歌名和歌手。
onClick()方法代码段则根据用户单击的按钮发送广播,发送广播时会把所按下的按钮的标识发送出来,发送的广播将激发后台Service的BroadcastReceiver,该BroadcastReceiver将会根据广播消息来改变播放状态。
BroadcastReceiver的实例----基于Service的音乐播放器之一的更多相关文章
- BroadcastReceiver的实例----基于Service的音乐播放器之二
		
该程序的后台Service会在播放状态发生改变时对外发送广播(广播将会激发前台Activity的BroadcastReceiver):它也会采用BroadcastReceiver监听来自前台Activ ...
 - 基于jQuery虾米音乐播放器样式代码
		
分享一款基于jQuery虾米音乐播放器样式代码.这是一款基于jquery+html5实现的虾米音乐播放器源码下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div c ...
 - QT5:C++实现基于multimedia的音乐播放器(二)
		
今天接着上一篇来实现播放器的槽函数. 先来实现播放模式,槽函数如下: //播放模式 void Music::musicPlayPattern() { //z=++z%3; ) { //顺序播放 pla ...
 - QT5:C++实现基于Multimedia的音乐播放器(序)
		
前段时间C++课设,决定做个播放器,于是参考了网上的代码后,做了个很简陋的音乐播放器(只写了MP3格式)出来,虽然功能甚少,但还是决定把过程记录一下. 成品如下图: 播放器功能: 上.下一首,音量控制 ...
 - QT5:C++实现基于multimedia的音乐播放器(一)
		
上一篇里简略的描述了一下播放器的实现,这一篇开始具体描述一下过程. 环境配置:Qt Creator 打开Qt Creator,创建一个new project,项目名称随你喜欢(我的是MusicPlay ...
 - Android基于发展Service音乐播放器
		
这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activit ...
 - Swift 3 :基于 AVAudioPlayer 的简单音乐播放器
		
2017.05.22 17:46* 字数 1585 阅读 5095评论 0喜欢 8赞赏 2 https://www.jianshu.com/p/4d5c257428a1 学习ios以来差不多接近两个月 ...
 - html网页音乐播放器自带播放列表
		
基于网页的音乐播放器demo http://pan.baidu.com/s/1dDgm7HR 自己diy了一个手机端在线音乐播放器演示地址http://shanxi2014.com/zhuandiz ...
 - SE Springer小组之《Spring音乐播放器》需求分析说明书一
		
软件需求说明书 软件需求说明书的编制是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解, 使之成为整个开发工作的基础. 1 引言 1.1编写目的 使用户对该软件的初始规定有一个理解,也使软 ...
 
随机推荐
- Java中JTree的简单案例
			
package ch12; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; /** * Created by ...
 - python中的最最最基本语法(1)
			
注意:对于我这个以前用c/c++的同学来说,可能一开始学习pyhon时有点不适应的,为什么呢?因为吧,python中,没有这玩意:{},也不用每句话才用分号分开的.python中通过缩进来分块的,一行 ...
 - 原创: 开题报告中摘要部分快速将一段文字插入到word的表格中
			
开题报告的摘要是表格形式,之前需要一个一个字的敲入,十分不方便修改. 所以百度了一下方法.现总结如下: 达到的效果 1 将这段文字复制粘贴到word中,在word文件中的每一个字与字之间插入空格.如何 ...
 - Android_用户界面概述和数据单位
			
一.UI界面概述 UI,对于一个应用而言用户界面是非常重要的一部分,是应用的脸,用户对应用第一个印象来自于界面,因此如果没有完美的用户界面,很难留住用户. 好的用户界面会极大提高用户的使用欲望并维护客 ...
 - 自我总结(六)---(学习j2ee+j2ee第一阶段项目)
			
自我完善的过程就是在不断的自我总结不断的改进. 学习了Struts2 Spring Hibernate. 十天前结束了这个课程.也考试了.这次考试老师说机试考的还不错.其实就是一个简单的用户登录,进行 ...
 - about opencl
			
Platform:LG G3,Adreno 330 1. 8M(3264x2448) memmap方式读入时间24ms,读出时间12ms,时间与内存大小基本成线性关系.使用memmap 与 memco ...
 - android打开,保存图片到sd卡,显示图片
			
1.打开根目录下test.jpg Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getA ...
 - 【bug】“Mat map” opencv全局变量不明确
			
Mat map= Mat::zeros(WIN_WIDTH, WIN_HIGH, CV_8UC3);//全局变量 int main() { map.setTo(); } Error map 不明确 s ...
 - wps的几个优点
			
wps的几个优点 1.wps非常小巧,wps2011源文件38M,安装后160M,wps2010安装过后158M,工具栏.程序设置.模板可保存在一个文件里面,重装后用\WPS Office Perso ...
 - Selenium处理时间控件
			
Web网页的时间控件往往嵌入到一个iframe里,抓取页面元素时,总是失败? 不要慌,WebDriver已经有相应的处理方法了. driver.switchTo().frame(driver.find ...