Android 用 broadcast receiver详解用例

  • Android 用 broadcast receiver详解用例
  • 一、BroadcastReceiver概述
    • 1.BroadcastReceiver定义
    • 2.Broadcast类型
      • 2.1普通广播:
      • 2.2有序广播:
      • 2.3粘性广播:
    • 3.BroadcastReceiver注册方式
      • 3.1动态注册
      • 3.2静态注册
  • 二、应用实例(音乐盒)
    • 要求:
    • 事件监听控制:
      • MainActivity.java文件
      • MusicService.java文件
  • 总结

Android 用 broadcast receiver详解用例


一、BroadcastReceiver概述

1.BroadcastReceiver定义

Broadcast(广播机制) 是一种广泛运用的应用程序之间 传输信息 的机制,而 BroadcastReceiver(广播接收器) 则是用于接收来自系统和应用的广播对并对其进行响应的组件,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据。

2.Broadcast类型

2.1普通广播:

它对于多个接收者来说是完全异步的,每个接受者不需要等待就可以接收到广播,接收者之间无法相互影响,也无法终止广播;

2.2有序广播:

顾名思义,它只发送到优先级较高的接收者那里,然后再由其转播到优先级低的接收者那里,同时,优先级高的接收者可以终止这个广播。例如短信可以被拦截。

2.3粘性广播:

就是假如接收者这边没有启动,但是发出了广播,然后接收者这边才启动,但是接收者依然可以接收到这个广播。

3.BroadcastReceiver注册方式

3.1动态注册

动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。

3.2静态注册

静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

二、应用实例(音乐盒)

要求:

实现歌曲的切换,播放暂停,显示歌曲简单信息

事件监听控制:

MainActivity.java文件

1、监听4个按钮的点击事件,发生点击事件就发送广播携带相应信息(control的值);
2、自定义一个BroadcastReceiver负责监听从Service中传回的广播;
3、根据传回广播中携带的信息(update、current)设置控制系统的状态,更改界面中播放键的图案显示和文本显示的歌曲信息。

MusicService.java文件

1、控制音乐播放;
2、监听每首歌是否播完,播完改变current的值,接着播放下一首,同时发送广播(current)告诉Activity歌曲已更换,页面内容得更换;
3、接收Activity发出的广播,根据广播携带的信息(control的值)改变标识状态的变量(status)的值,同时控制音乐是否播放/暂停,控制当前音乐播放哪首歌(current);
4、把更改过的状态值和current值用广播传给Activity,让Activity做界面变动。

部分代码如下(示例):
布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"><ImageButtonandroid:id="@+id/previous"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@android:drawable/ic_media_previous" /><ImageButtonandroid:id="@+id/play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@android:drawable/ic_media_play" /><ImageButtonandroid:id="@+id/stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@android:drawable/ic_media_pause" /><ImageButtonandroid:id="@+id/next"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@android:drawable/ic_media_next" /><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20dp"android:textColor="#000000"android:ellipsize="marquee"android:layout_weight="1"android:marqueeRepeatLimit="marquee_forever"/><TextViewandroid:id="@+id/author"android:textSize="12dp"android:gravity="center_vertical"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>
mediaPlayer  = MediaPlayer.create(this,R.raw.white);
//创建音乐播放器

onCreate:

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);activityReceiver = new ActivityReceiver();IntentFilter filter = new IntentFilter();//指定BroadCastReceiver监听的actionfilter.addAction(UPDATE_ACTION);registerReceiver(activityReceiver,filter);Intent intent = new Intent(this,MusicService.class);startService(intent);//找到对应控件play = this.findViewById(R.id.imgplay);stop = this.findViewById(R.id.imgstop);next = this.findViewById(R.id.imgnext);last = this.findViewById(R.id.imglast);title = this.findViewById(R.id.txttitle);author = this.findViewById(R.id.txtauthor);//添加监听play.setOnClickListener(this);stop.setOnClickListener(this);next.setOnClickListener(this);last.setOnClickListener(this);}

MainActivity.java:

Intent intent = getIntent(); //获取广播意图对象
isCast = intent.getBooleanExtra("iscast", false);  //默认值为false
btnStop.setEnabled(isCast);   //设置停止按钮可用和单击监听
if(isCast) Toast.makeText(this, "正在播放音乐...", Toast.LENGTH_SHORT).show();
btnStop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v){Intent intent=new Intent(MainActivity.this,MyAudioService.class);//在Activity组件里,停止音乐播放服务stopService(intent);finish();  //销毁本活动}
});

MusicService.java:

@Overridepublic void onClick(View source) {//创建IntentIntent intent=new Intent("org.crazyit.action.CTL_ACTION");switch (source.getId()){//按下播放/暂停按钮case R.id.play:intent.putExtra("control",1);break;//按下停止按钮case R.id.stop:intent.putExtra("control",2);break;//按下上一首按钮case R.id.last:intent.putExtra("control",3);break;//按下下一首按钮case R.id.next:intent.putExtra("control",4);break;}//发送广播,将被Service组件中的BroadcastReceiver接收到sendBroadcast(intent);}

##界面效果:

总结

原本是想实现自动获取音乐消息,最后现实不了,只能手动导入对应歌曲的基本信息。

本文大部分参考了Android中对broadcast receiver组件部分的描述,希望本文对大家更好地使用broadcast receiver对象有所帮助。

如果有疑问,欢迎大家在评论中给我留言,看到会及时回复。

作者:林嘉豪

原文链接:https://blog.csdn.net/weixin_51513528/article/details/121893422

Android 用 broadcast receiver组件实现音乐盒相关推荐

  1. Android静态安全检测 - Broadcast Receiver组件暴露

    Broadcast Receiver组件暴露 - exported属性 一.android:exported 该属性用来标示,当前Broadcast Receiver是否可以从当前应用外部获取Rece ...

  2. 007 Android之Broadcast Receiver

    文章目录 广播的概念 广播的类型 广播接收实例 IP拨号器 开机自启动 监听应用安装和卸载 广播的概念 现实中的广播:电视台发送广播,使用收听机可以收听广播,得到广播信息 Android中的广播:系统 ...

  3. android 四大组件Broadcast Receiver

    本文介绍Broadcast Receiver,包括几部分内容:Broadcast Receiver概述及实例.自定义Broadcast Receiver.Broadcast Receiver的实现细节 ...

  4. [2021.07.12]Android系统广播机制(Broadcast Receiver)

    广播(Broadcast)是一种在组件之间进行消息传递的方式.这些组件可以运行在同一个进程中,也可以在不同的进程中.事实上,广播机制就是在Binder进程间通信的基础上实现的.那么,有了Binder通 ...

  5. android 组件(activity,service,content provider,broadcast receiver,intent)详解

    Android应用程序由若干个不同类型的组件组合而成,每一个组件具有其特定的安全保护设计方式,它们的安全直接影响到应用程序的安全.Android应用程序组件的主要类型有:活动(Activity),服务 ...

  6. android应用程序的组件,Android基础之应用程序组件

    Android应用程序由若干个不同类型的组件组合而成,每一个组件具有其特定的安全保护设计方式,它们的安全直接影响到应用程序的安全.Android应用程序组件的主要类型有:活动(Activity),服务 ...

  7. Android 广播(Broadcast)

    Android 广播Broadcast 1.小声嘀咕 2.广播机制简介 3.接收系统广播 3.1动态注册 3.2静态注册 4.发送自定义广播 4.1标准广播 4.2有序广播 5.使用本地广播 1.小声 ...

  8. 使用Android Studio编写一个简单的音乐盒

    文章目录 一.知识要点 二.xml代码 activity_main.xml 三.java代码 MainActivity.java MusicService.java 四.运行界面展示 五. 源码Git ...

  9. Android架构及四大组件

    Android架构及四大组件 Android架构 Loader层: Linux内核层 硬件抽象层 (HAL) Android Runtime & 系统库 Framework层 App层 Sys ...

最新文章

  1. CTFshow 命令执行 web45
  2. 版本号控制-搭建gitserver
  3. python测试函数
  4. 有法院被执行人记录还能贷款吗?
  5. 案例 github_github 项目搜索技巧-让你更高效精准地搜索项目
  6. idea 解决jar 的冲突
  7. 学以致用:让visualstudio爱上sublime
  8. 用户身份链接方法——DeepLink
  9. 【操作系统】进程通信的几种方式
  10. 系统角色权限设计与实现
  11. 个人游戏经历及游戏体验(解谜向)
  12. 四月,诗月,你是最美人间四月天。
  13. html表格新插入一列,VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-...
  14. JavaScript基础学习——CSS预处理Less
  15. UVA1616 Caravan Robbers
  16. 书摘—做自己的公关专家
  17. 点云公开数据集:S3DIS
  18. 一些俗语,不思八九,常想一二
  19. [UnityShader入门精要读书笔记]37.水波效果
  20. 最难初等平面几何题系列及其解法的一个介绍性材料

热门文章

  1. 迭代器 iter()
  2. 如何知道Android机型是32位还是64位
  3. 哈尔尺度函数_用来表示定义在实数域上的平方可积函数空间Haar尺度函数.PPT
  4. 全球与中国多模连续光纤激光器市场现状及未来发展趋势
  5. excel php 数字科学计数_PHP导出excel时数字变为科学计数的解决方法
  6. 【Unity】3D模型或粒子渲染在UI上层
  7. 详解FindBugs的各项检测器
  8. struct2json API 文档,s2j库(c语言与json互转)
  9. 深入了解机器学习(Descending into ML):线性回归
  10. 谈谈自己的可转债策略(包含策略代码)