BroadcastReceiver的实例----基于Service的音乐播放器之一

时间:2022-08-29 19:48:27

下面的程序开发了一个基于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&colon;C&plus;&plus;实现基于multimedia的音乐播放器(二)

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

  4. QT5&colon;C&plus;&plus;实现基于Multimedia的音乐播放器(序)

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

  5. QT5&colon;C&plus;&plus;实现基于multimedia的音乐播放器(一)

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

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

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

  7. Swift 3 &colon;基于 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. note

    John的博客 http://blog.sina.com.cn/chinatownjohn 剑4-11真题+新东方pdf,王陆语料库(听力)+顾家北手把手教你写剑9版(写作)+人人雅思哥记忆卡(口语) ...

  2. 简单谈谈dom解析xml和html

    前言 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.html,xml都是基于这个模型构造的.这也是一个W3C推出的标准.j ...

  3. SQL 各种连接:内连接,外连接(左外,右外,完全外&rpar;

    在讲述之前,假设有如下两个表EMP, DEPT, 并且他们数据如下:

  4. linux shell中的特殊符号

    该内容,均来自此网址(http://www.92csz.com/study/linux/12.htm).在下只是把那些命令的截图给去了. 你在学习linux的过程中,也许你已经接触过某个特殊符号,例如 ...

  5. Visual Studio 2015&sol;2017 与ASP&period;NET CORE 联合创建具有SPA模式的Angular2模板

    虽然注册博客园很久,但是一直没有什么可写的,真心感觉好尴尬了,这次终于找到了一点可以写,有点小兴奋和小害羞呢. 进入主题,前端SPA模式越来越受到欢迎,Core 也开始被很多企业提上日程,但是因为这个 ...

  6. React&period;js 三周 -- 入门到搭建团队基础项目

    吐槽 公司自己的产品,由于历史遗留问题,前端一直是和java放到一个项目里写的. 导致了,前端就被死死的绑在了IDEA战车上.想要看页面效果,先起几个java服务.想要调试一个改动,重启个java服务 ...

  7. HDU 4568 SPFA &plus; TSP

    这道题是长沙邀请赛的题,当时是道签到题. 这种题还是很常见的,讲一下思路. 首先是预处理出每个宝藏之间的距离,还有到边的距离,直接对每个宝藏进行一次SPFA就可以了. 然后就是经典的求TSP的过程. ...

  8. javaweb 实战&lowbar;1

    购物车项目 Primary SQL语句 product create table product ( id ) default null, name varchar() default null, p ...

  9. corethink功能模块探索开发(十七)opencmf&period;php 配置文件

    图样: opencmf.php存在于每个模块的根目录,是模块配置文件. 能进行持久化配置参数保存,一开始我以为是写文件或者做缓存,后来在数据库中发现admin_module表,存储了每个模块的配置参数 ...

  10. Windows &plus; Ubuntu 双系统安装

    前言:本篇文章是对之前文章的更新,更新的主内容是把原来用手机拍摄的图片换成了虚拟机的截图,以及对磁盘划分的新的见解和一些使用感受,原本是打算删除之前的那篇Win + Ubuntu双系统的文章的,后来想 ...