当前课程知识点:Android应用开发基础 > 第五章 广播 > 5.1 Android广播概述 > 5.1 Android广播概述
本节我们介绍广播
我们上学时都有过这样的经历
当我们在火车站列车候车室中等待时
每当有某次列车开始检票
或者进站上车时
就会播放通知
来告知在候车室等待的人们该消息
为了便于进行系统级别的消息通知
Android引入了一套类似的广播机制
然而比上述情景要灵活得多
常用的手机卫士
就有很多模块使用了广播机制
我们看一下应用的具体实例
比如在手机卫士中进行电量的管理
骚扰电话的拦截和显示
骚扰短信的拦截和显示
这些例子都使用了广播机制
什么是广播呢
广播有如下的一些特征
一 广播是一种数据传送与交换方式
二 广播传送数据时存在两个固定角色
1 负责发送广播的发送方
2 可以接收广播的接收方
广播发送方只负责按特定通道 频道
来发送数据
并不考虑接收
广播接收方只有通过特定通道 频道
才能接收到数据
什么是Android广播呢
Android的广播有如下的一些特点
Android广播Broadcast
是Android四大核心组件之一
1 以广播发送者分类
广播可被分为系统广播和自定义广播
2 Android广播机制
是Android系统实现应用程序之间
数据传递的一种方式
这种方式被称为跨进程间通讯(IPC)
应用程序是如何应用Android广播呢
Android会通过系统广播
告知当前设备中所有应用程序
系统环境
或系统应用发生的变化
设备中的应用程序
可以根据需要来接收这些广播
以实现相应的业务
如下图所示
这是一个手机卫士应用的例子
设备收到短信与电话后
产生了Android的广播
应用程序可以拦截
发送到设备中的短信与电话
还可以获取设备中电池电量的变化情况
获取设备启动 关机的信息
Android系统是系统广播的发送方
应用程序需要编写广播接收器来接收广播
Android有哪些广播呢
如图所示
下面是Android的广播类型
通过Android的广播Action的名字
就可以使用Android的广播
比如我们常用的有如下几种
1 SMS_RECEIVED_ACTION
接收到短信时 系统会发送这个广播
2 ACTION_PHONE_STATE_CHANGED
电话打出 接入时 系统发送的广播
3 ACTION_BATTERY_LOW
设备处于低电量时 系统发送的广播
应用程序如何接收Android的系统广播呢
1 获取常用Android系统广播种类
2 理解常用系统广播使用的Action
频道和通道
3 编写广播接收类 BroadcastReceiver
4 按相应的Action 频道
将接收器注册到Android系统
5 在接收器内编写对应广播数据的处理业务
下面我们介绍
如何获取Android设备中电池信息
主要包括
1 如何了解当前设备是否处于充电状态
2 如何了解当前设备使用何种充电模式
3 当前设备的实际电量
4 当前设备充电是否完成
5 当前设备的电池
是否在低电量环境中运行
Android通过广播机制传递电池的状态信息
1 设备接入充电器时
Android会在系统范围内
发送设备充电广播
2 设备拔出充电器时
Android会在系统范围内
发送设备停止充电广播
3 设备电池电量发生变化时
Android会在系统范围内
发送设备电池电量发生改变的广播
4 每次发送广播时
广播中附带了大量的电池设备的信息
下面我们以一个实例
讲解如何获取设备中电池的电量
具体步骤如下
1 获取Android系统广播的类型
2 获取电池电量广播的Action 频道
3 编写广播接收类BatteryReceiver接收广播
4 向Android系统注册广播接收器
BatteryReceiver
5 从广播中获取电池信息
6 应用程序退出时注销广播接收器
Android有很多内部组件
比如线程 服务 广播 视图
组件之间的通信有很多种方式
如图所示
常用的有Handler机制
线程视图一般通过使用视图Handler
发送消息到视图的消息队列
视图从消息队列中取出消息
更新视图UI组件信息
这种机制使得组件之间的通信比较复杂
组件之间不能解耦
代码移植和可读性都不好
EventBus是一个开源库的Android和java库
使用发布订阅的方式
是松耦合模式
EventBus使中央通信能够用几行代码解耦类
可以简化代码
消除依赖关系
加速应用程序开发
组件之间使用EventBus
接收数据的组件将自己注册到EventBus
发送数据的组件
将数据通过Post发送到总线
总线将数据发送到订阅者
EventBus总线的作用主要有如下几个特点
1 简化组件之间的通信
2 解耦事件发送者和接收者
3 使用UI 例如activity fragment和后台线程
避免复杂易出错的依赖和生命周期问题
4 快速
EventBus专门优化的代码具有很高的性能
如何使用EventBus呢
如下图所示
1 Build.gradle文件中
dependencies上添加插件依赖
implementation 'org.greenrobot:eventbus
3.1.1'是它的版本号
2 EventBus初始化
将Activity注册到EventBus上
3 Event消息的发送
新建EventData事件对象
设置事件类型
设置数据
发送数据
如何处理EventBus的消息呢
如下图所示
1 使用@Subscribe
表示是EventBus的消息处理函数
2 重新实现onEventMainThread方法
3 使用event.getEventCode() 获取消息类型
4 使用event.getiBatterydata()取出数据
EventBus如何注销呢
如下图所示
1 重写视图的onDestroy方法
2 使用EventBus.getDefault().unregister(this)
注销EventBus的订阅
下面我们以一个电量广播例子
讲解如何实现Android系统广播的接收
1 编写广播接收类BatteryReceiver接收广播
继承BroadcastReceiver
并重写onReceive方法
如图所示
1.1 首先使用intent.getAction()中
取出意图的名称
1.2 判断意图是否为电量改变的广播
ACTION_BATTERY_CHANGED
1.3 使用intent.getExtras()
取出广播数据
1.4 根据BatteryManager.EXTRA_LEVEL
取出电量绝对值
1.5 根据BatteryManager.EXTRA_SCALE
取出电量最大值
1.6 换算出电量的百分比
使用level/(float)scale*100
来计算出电量的百分比
1.7 将电量值使用EventBus
发送到EventBus总线上
2 在Activity中注册广播接收器
BatteryReceiver
如图所示
2.1 定义广播接收器
2.2 将Activity视图注册到EventBus
2.3 初始化广播接收器对象
2.4 新建电量变化广播过滤器
2.5 设置广播接收器接收电量广播
3 BatteryReceiver与MainActivity之间
通过EventBus传递数据
如图所示
3.1 新建eventCode变量代表数据类型
3.2 新建iBatterydata变量代表电量值
4 Activity中使用EventBus获取信息
电池电量信息均被保存在EventData对象
如图所示
4.1 重写Event的消息处理方法
onEventMainThread
4.2 使用event.getEventCode()
判断是否是电量变化广播消息
4.3 使用event.getiBatterydata()
取出电量的数据并显示到组件上
5
应用程序退出注销EventBus和广播接收器
如图所示
5.1 视图中重写onDestroy() 方法
5.2 使用super.unregisterReceiver
注销广播接收器
5.3
使用EventBus.getDefault().unregister(this)
注销EventBus接收
下面就是我们最后的效果
如图所示
我们可以看到电量的实时情况
这就是电量广播的实例
-Android Studio4.1.2安装常用问题汇总2021.3.15
-1.1 Android概述
--1.1 Android Studio安装与配置-实践案例
-1.1 Android概述--作业
-1.2 Android程序
-1.2 Android程序--作业
-1.3 Android程序调试
-1.3 Android程序调试--作业
-2.1 Activity概述
-2.1 Activity概述--作业
-2.2 Activity应用
-第2章 Android视图--2.2 Activity应用
-3.1 Activity布局
-3.1 Activity布局--作业
-3.2 Android基础组件
-3.2 Android基础组件--作业
-3.3 Android中级组件
-3.3 Android中级组件--作业
-3.4 Android适配器
-3.4 Android适配器--作业
-4.1 Fragment碎片组件
-4.1 Fragment碎片组件--作业
-4.2 ViewPager翻页类组件
-4.2 ViewPager翻页类组件--作业
-讨论:fragment与activity的生命周期有哪些不同?
-5.1 Android广播概述
-5.1 Android广播概述--作业
-5.2 Android广播工作原理
-5.2 Android广播工作原理--作业
-5.3 自定义广播
-第5章 广播--5.3 自定义广播
-5.4 有序广播
--5.4有序广播
-第5章 广播--5.4 有序广播
-6.1 系统服务概述
-6.1 系统服务概述--作业
-6.2 访问系统服务
-6.2 访问系统服务--作业
-6.3 自定义服务
-第6章 Android服务--6.3 自定义服务
-6.4 多线程
--6.4 多线程
-第6章 Android服务--6.4 多线程
-7.1 Android运行权限
-7.1 Android运行权限--作业
-7.2 URL URI概述
-第7章 内容提供者ContentProvider--7.2 URL URI概述
-7.3 ContentProvider概述
-第7章 内容提供者ContentProvider--7.3 ContentProvider概述
-7.4 访问通讯录
-第7章 内容提供者ContentProvider--7.4 访问通讯录
-7.5 课后作业案例
-8.1 相机服务
--8.1 相机服务
-8.1 相机服务--作业
-8.2 音视频服务
-8.2 音视频服务--作业
-9.1 网络服务概述
-9.1 网络服务概述--作业
-9.2 网络框架
--9.2 网络框架
-9.2 网络框架--作业
-9.3 Json
--9.3 Json
-第9章 网络技术--9.3 Json
-9.4 Volley
-第9章 网络技术--9.4 Volley
-10.1 文件存储
--10.1.3 实践案例-SharedPreference文件读写
-10.1 文件存储--作业
-10.2 数据库存储
-10.2 数据库存储--作业
-第1章 实训简介以及开发环境配置
-第2章 在线音乐播放器整体设计以及服务端开发
-第3章 在线音乐播放器-客户端开发
-第4章 在线音乐播放器-完整版
-第5章 QQ聊天项目
-第6章 在线点餐系统