Android开发之Broadcast Receive(广播机制)其实开发如此简单
什么是BroadcastReceiver
BroadcastReceiver(广播接收器)用于响应来自其他应用程序或者系统的广播消息。这些消息有时被称为事件或者意图。本质上来讲BroadcastReceiver是一个全局的监听器,隶属于Android四大组件之一。
使用场景
1、 不同组件之间通信(包括应用内 / 不同应用之间)
2、Android系统在特定情况下与App之间的消息通信
3、多线程通信
分类
1.无序广播
在广播发出之后,所有广播接收器几乎都会在同一时刻接收到这条广播消息,它们之间没有任何先后顺序,广播的效率较高。
2.有序广播
在广播发出之后,同一时刻只有一个广播接收器能够收到这条广播消息,当其逻辑执行完后该广播接收器才会继续传递。特殊情况下可以对广播进行拦截。
我个人不建议使用有序广播进行处理,因为部分手机的优先级倒置的情况,在实际处理问题的过程中是一件非常麻烦的事儿,尤其是在这个产品多元化的年代,尽量不要给开发过程找麻烦
实现
创建DemoBroadcastReceiver
public class DemoBroadcastReceiver extends BroadcastReceiver {private String TAG = "broadcast_get";@Overridepublic void onReceive(Context context, Intent intent) {Log.v(TAG, intent.getStringExtra("value")+isOrderedBroadcast());
// abortBroadcast();//有序广播时可以根据业务需求进行拦截}
}
注册
注册分为两种形式,动态注册和静态注册
动态注册
动态注册是指在Activity中进行注册,方法如下
IntentFilter inflater = new IntentFilter();inflater.addAction(SEND_RECEIVER_CODE);inflater.setPriority(666);demoBroadcastReceiver = new DemoBroadcastReceiver();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {mContext.registerReceiver(demoBroadcastReceiver,inflater, Context.RECEIVER_NOT_EXPORTED);}else {mContext.registerReceiver(demoBroadcastReceiver,inflater);}
静态注册
静态注册指的是在AndroidManifest.xml中进行注册,方法如下
<receiver android:name=".demo.receiver.DemoBroadcastReceiver"android:enabled="true"android:exported="true"><intent-filter android:priority="500"><action android:name="ACTION_DEMO_SENDER"/></intent-filter></receiver>
发送广播
有序广播
Intent intent = new Intent();intent.setAction(SEND_RECEIVER_CODE);intent.setPackage(mContext.getPackageName());intent.putExtra("value","发送广播测试");mContext.sendOrderedBroadcast(intent,null);
无序广播
Intent intent = new Intent();intent.setAction(SEND_RECEIVER_CODE);intent.setPackage(mContext.getPackageName());intent.putExtra("value","发送广播测试");mContext.sendBroadcast(intent);
取消注册
@Overrideprotected void onDestroy() {mContext.unregisterReceiver(demoBroadcastReceiver);super.onDestroy();}
设置优先级
优先级适用于有序广播,值越大,优先级越高(在没有发生优先级倒置的情况下)
inflater.setPriority(666);
拦截
适用于有序广播,拦截后消息不在发送给其它广播
abortBroadcast();
特别说明
Context.RECEIVER_NOT_EXPORTED 表示为应用内部广播
Context.RECEIVER_EXPORTED 表示可以接收应用外部广播
这部分其实很简单,根据自己的实际情况去使用就可以了
系统广播
常用的系统广播如下
//网络相关的广播
android.net.conn.CONNECTIVITY_CHANGE
android.net.wifi.WIFI_STATE_CHANGED
android.net.wifi.STATE_CHANGE//电池电量的广播
android.intent.action.BATTERY_CHANGED
android.intent.action.BATTERY_LOW//屏幕状态的广播
android.intent.action.SCREEN_ON
android.intent.action.SCREEN_OFF.........
举例
接收系统广播
比如我们想监听一下屏幕是否点亮的需求,就可以如下实现
IntentFilter inflater = new IntentFilter();inflater.addAction(SEND_RECEIVER_CODE);inflater.addAction("android.intent.action.SCREEN_OFF");inflater.addAction("android.intent.action.SCREEN_ON");inflater.setPriority(666);demoBroadcastReceiver = new DemoBroadcastReceiver();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {mContext.registerReceiver(demoBroadcastReceiver,inflater, Context.RECEIVER_EXPORTED);}else {mContext.registerReceiver(demoBroadcastReceiver,inflater);}
打完收工,拜拜
相关文章:
Android开发之Broadcast Receive(广播机制)其实开发如此简单
什么是BroadcastReceiver BroadcastReceiver(广播接收器)用于响应来自其他应用程序或者系统的广播消息。这些消息有时被称为事件或者意图。本质上来讲BroadcastReceiver是一个全局的监听器,隶属于Android四大组件之一。 使用场景 1、 不同…...
Chromium 中chrome.cookies扩展接口c++实现分析
chrome.cookies 使用 chrome.cookies API 查询和修改 Cookie,并在 Cookie 发生更改时收到通知。 更多参考官网定义:chrome.cookies | API | Chrome for Developers (google.cn) 本文以加载一个清理cookies功能扩展为例 https://github.com/Google…...
excel筛选多个单元格内容
通常情况下,excel单元格筛选时,只筛选一个条件,如果要筛选多个条件,可以如下操作: 字符串中间用空格分隔就行。...
Instant 和 Duration 类(进行时间处理)
Instant Instant 类是 Java 8 中引入的,用于表示一个具体的时间点,它基于 UTC(协调世界时)时区。以下是 Instant 类的一些常用方法及其简要说明: now():获取当前的 Instant 对象,表示当前时间…...
Java每日面试题(Spring)(day19)
目录 Spring的优点什么是Spring AOP?AOP有哪些实现方式?JDK动态代理和CGLIB动态代理的区别?Spring AOP相关术语Spring通知有哪些类型?什么是Spring IOC?Spring中Bean的作用域有哪些?Spring中的Bean什么时候…...
【多线程】线程池(上)
文章目录 线程池基本概念线程池的优点线程池的特点 创建线程池自定义线程池线程池的工作原理线程池源码分析内置线程池newFixedThreadPoolSingleThreadExecutornewCachedThreadPoolScheduledThreadPool 线程池的核心线程是否会被回收?拒绝策略ThreadPoolExecutor.AbortPolicyT…...
ansible 语句+jinjia2+roles
文章目录 1、when语句1、判断表达式1、比较运算符2、逻辑运算符3、根据rc的返回值判断task任务是否执行成功5、通过条件判断路径是否存在6、in 2、when和其他关键字1、block关键字2、rescue关键字3、always关键字 3、ansible循环语句1、基于列表循环(whith_items)2、基于字典循…...
【Docker项目实战】使用Docker部署HumHub社交网络平台
【Docker项目实战】使用Docker部署HumHub社交网络平台 一、HumHub介绍1.1 HumHub简介1.2 HumHub特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载HumHub镜…...
“医者仁术”再进化,AI让乳腺癌筛查迎难而上
世卫组织最新数据显示,我国肿瘤疾病仍然呈上升趋势,肿瘤防控形势依然比较严峻。尤其是像乳腺癌等发病率较高的疾病,早诊断和早治疗意义重大,能够有效降低病死率。 另一方面,中国地域广阔且发展不平衡,各地…...
安卓流式布局实现记录
效果图: 1、导入第三方控件 implementation com.google.android:flexbox:1.1.0 2、布局中使用 <com.google.android.flexbox.FlexboxLayoutandroid:id"id/baggageFl"android:layout_width"match_parent"android:layout_height"wrap_co…...
-bash gcc command not found解决方案(CentOS操作系统)
以 CentOS7 为例,执行以下语句 : yum install gcc如果下载不成功,并且网络没有问题。 执行以下语句 : cp -r /etc/yum.repos.d /etc/yum.repos.d.bakrm -f /etc/yum.repos.d/*.repocurl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.…...
(二)Python输入输出函数
一、输入函数 input函数:用户输入的数据,以字符串形式返回;若需数值类型,则进行类型转换。 xinput("请入你喜欢的蔬菜:") print(x) 二、输出函数 print函数 输出单一数值 x666 print(x) 输出混合类型…...
从调用NCCL到深入NCCL源码
本小白目前研究GPU多卡互连的方案,主要参考NCCL和RCCL进行学习,如有错误,请及时指正! 内容还在整理中,近期不断更新!! 背景介绍 在大模型高性能计算时会需要用到多卡(GPU…...
深入理解Transformer的笔记记录(精简版本)NNLM → Word2Vec
文章的整体介绍顺序为: NNLM → Word2Vec → Seq2Seq → Seq2Seq with Attention → Transformer → Elmo → GPT → BERT 自然语言处理相关任务中要将自然语言交给机器学习中的算法来处理,通常需要将语言数学化,因为计算机机器只认数学符号…...
优选算法第一讲:双指针模块
优选算法第一讲:双指针模块 1.移动零2.复写零3.快乐数4.盛最多水的容器5.有效三角形的个数6.查找总价格为目标值的两个商品7.三数之和8.四数之和 1.移动零 链接: 移动零 下面是一个画图,其中,绿色部分标出的是重点: 代码实现&am…...
智能优化算法-水循环优化算法(WCA)(附源码)
目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 水循环优化算法 (Water Cycle Algorithm, WCA) 是一种基于自然界水循环过程的元启发式优化算法,由Shah-Hosseini于2012年提出。WCA通过模拟水滴在河流、湖泊和海洋中的流动过程,以及蒸发…...
基于SpringBoot的个性化健康建议平台
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理基于智能推荐的卫生健康系统的相关信息成为…...
Mapsui绘制WKT的示例
步骤 创建.NET Framework4.8的WPF应用在NuGet中安装Mapsui.Wpf 4.1.7添加命名空间和组件 <Window x:Class"TestMapsui.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winf…...
Modbus TCP 西门子PLC指令以太口地址配置以及 Poll Slave调试软件地址配置
1前言 本篇文章讲了 Modbus TCP通讯中的一些以太网端口配置和遇到的一些问题, 都是肝货自己测试的QAQ。 2西门子 SERVER 指令 该指令是让外界设备主动连接此PLC被动连接, 所以这里应该填 外界设备的IP地址。 这边 我因为是电脑的Modbus Poll 主机来…...
MySQL表的基本查询上
1,创建表 前面基础的文章已经讲了很多啦,直接上操作: 非常简单!下一个! 2,插入数据 1,全列插入 前面也说很多了,直接上操作: 以上插入和全列插入类似,全列…...
百度网盘下载加速终极方案:免费解锁满速下载的完整指南
百度网盘下载加速终极方案:免费解锁满速下载的完整指南 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘下载速度只有几十KB/s而烦恼吗?你是否曾经面对大文件下载时感到绝望?…...
【Ease UI】2026-04-03组件更新:新增组件xly-file-preview文件预览组件
🚀 即插即用的 Vue 3 业务组件库,让中后台开发回归简单 Ease UI 是一套为「快速复制」而生的 Vue 3 业务组件库。每个组件都是独立的 .vue 单文件,不依赖任何外部样式或工具函数,直接复制到你的项目即可使用。它仅依赖 Element P…...
别再只用WPF自带的DragDrop了!手把手教你从零封装一个可拖拽合并数据的自定义控件
突破WPF原生拖拽限制:构建高定制化数据合并控件的实战指南 在构建现代企业级桌面应用时,拖拽交互已成为提升用户体验的关键要素。WPF虽然提供了基础的DragDrop API,但当我们需要实现类似看板系统中卡片合并、数据聚合等复杂交互时,…...
OpenClaw多模态实践:Qwen3-14B分析截图生成操作指南
OpenClaw多模态实践:Qwen3-14B分析截图生成操作指南 1. 为什么需要截图分析自动化 上周团队来了三位新同事,我需要反复演示软件操作流程。每次截屏标注步骤后,还要手动整理成PDF发送。这种重复劳动让我开始思考:能否让AI自动识别…...
Go 网关模式:让业务逻辑和外部服务“保持距离“的艺术
🎬 场景小剧场 想象一下:你的电商系统要接支付功能。如果直接在 order 包里写 stripe.Charge(),明天老板说"换支付宝",你就要满世界改代码 😫 网关模式就是给业务逻辑装个"万能插座":不…...
Ryujinx:用C重构Switch游戏生态的技术探索之旅
Ryujinx:用C#重构Switch游戏生态的技术探索之旅 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 当游戏主机硬件迭代加速,玩家渴望在更强大平台体验经典游戏时&a…...
3步掌握猫抓扩展:网页资源嗅探工具全面使用指南
3步掌握猫抓扩展:网页资源嗅探工具全面使用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为在线视频无法保存而困扰吗&#…...
3种方法让旧打印机秒变AirPrint:Docker容器化改造指南
3种方法让旧打印机秒变AirPrint:Docker容器化改造指南 【免费下载链接】cups-avahi-airprint Docker image for CUPS intended as an AirPrint relay 项目地址: https://gitcode.com/gh_mirrors/cu/cups-avahi-airprint 你是否曾遇到过这样的场景:…...
Memento-Skills 深度解析:当 AI 学会自己“造” AI,大模型的进化被彻底改写
Memento-Skills 深度解析:当 AI 学会自己“造” AI,大模型的进化被彻底改写当其他大模型还在云端苦苦等待下一次耗资千万的“重新训练”时,Memento-Skills 已经在你的系统里默默写代码,给自己“招聘”并设计了100个精通各个领域的…...
【无人机】模拟无人机在一个移动地面车辆自主着陆垂直起降在受风力干扰和转子推力影响【含Matlab源码 15287期】
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...
