下面的程序开发了一个基于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的音乐播放器之一的更多相关文章

  1. BroadcastReceiver的实例----基于Service的音乐播放器之二

    该程序的后台Service会在播放状态发生改变时对外发送广播(广播将会激发前台Activity的BroadcastReceiver):它也会采用BroadcastReceiver监听来自前台Activ ...

  2. 基于jQuery虾米音乐播放器样式代码

    分享一款基于jQuery虾米音乐播放器样式代码.这是一款基于jquery+html5实现的虾米音乐播放器源码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div c ...

  3. QT5:C++实现基于multimedia的音乐播放器(二)

    今天接着上一篇来实现播放器的槽函数. 先来实现播放模式,槽函数如下: //播放模式 void Music::musicPlayPattern() { //z=++z%3; ) { //顺序播放 pla ...

  4. QT5:C++实现基于Multimedia的音乐播放器(序)

    前段时间C++课设,决定做个播放器,于是参考了网上的代码后,做了个很简陋的音乐播放器(只写了MP3格式)出来,虽然功能甚少,但还是决定把过程记录一下. 成品如下图: 播放器功能: 上.下一首,音量控制 ...

  5. QT5:C++实现基于multimedia的音乐播放器(一)

    上一篇里简略的描述了一下播放器的实现,这一篇开始具体描述一下过程. 环境配置:Qt Creator 打开Qt Creator,创建一个new project,项目名称随你喜欢(我的是MusicPlay ...

  6. Android基于发展Service音乐播放器

    这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activit ...

  7. Swift 3 :基于 AVAudioPlayer 的简单音乐播放器

    2017.05.22 17:46* 字数 1585 阅读 5095评论 0喜欢 8赞赏 2 https://www.jianshu.com/p/4d5c257428a1 学习ios以来差不多接近两个月 ...

  8. html网页音乐播放器自带播放列表

    基于网页的音乐播放器demo  http://pan.baidu.com/s/1dDgm7HR 自己diy了一个手机端在线音乐播放器演示地址http://shanxi2014.com/zhuandiz ...

  9. SE Springer小组之《Spring音乐播放器》需求分析说明书一

    软件需求说明书 软件需求说明书的编制是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解, 使之成为整个开发工作的基础. 1 引言 1.1编写目的 使用户对该软件的初始规定有一个理解,也使软 ...

随机推荐

  1. ZOJ-2338 The Towers of Hanoi Revisited 输出汉诺塔的最优解移动过程

    题意:给定N(1<= N <=64)个盘子和M(4<= M <= 65)根柱子,问把N个盘子从1号柱子移动到M号柱子所需要的最少步数,并且输出移动过程. 分析:设f[i][j] ...

  2. iOS - UIStepper

    前言 NS_CLASS_AVAILABLE_IOS(5_0) __TVOS_PROHIBITED @interface UIStepper : UIControl @available(iOS 5.0 ...

  3. Python学习(21)python操作mysql数据库_操作

    目录 数据库连接 创建数据库表 数据库插入操作 数据库查询操作 数据库更新操作 删除操作 执行事务 错误处理 数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TEST. 在TEST数 ...

  4. Round robin

    http://www.computerhope.com/jargon/r/rounrobi.htm Round robin Round robin is a method of distributin ...

  5. 第一天……

    Hello,大家好! 不对,这个开头有点不对.我不应该这么说,这个博客我是为我自己而开通的.目的很简单,好记兴不如烂笔头,把每天所学所感写下来. 我想作一个有条理的人,一个有计划的人,一个有效率的人. ...

  6. 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!

    看了很多关于阐述JAVA传参到底是值传递还是引用的问题,有些说得很肤浅让人感觉似懂非懂的感觉,但是好像又能解决一些问题,然后就止步了.还有一些则是,讲得很深奥,看着好像很有道理的样子,但是其实还是没怎 ...

  7. 键盘控制div移动

    <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...

  8. haskell读写文件相关(含二进制)

    使用System.IO模块 使用函数 openBinaryFile :: FilePath -> IOMode -> IO Handle 打开文件 IOMode为 ReadWriteMod ...

  9. XMLHttpRequest cannot load – Origin is not allowed by Access-Control-Allow-Origin.

    报错:跨域  XMLHttpRequest cannot load http://localhost:8080/yxt-admin/admin/store. No 'Access-Control-Al ...

  10. x265

    1.编译库 https://bitbucket.org/multicoreware/x265/src/tip/build/README.txt?at=default 2.无法定位程序输入点x265_e ...