Android --- 广播
广播是什么?
一种相互通信,传递信息的机制,组件内、进程间(App之间)
如何使用广播?
组成部分
发送者-发送广播
与启动其他四大组件一样,广播发送也是使用intent发送。
- 设置action:表示这个广播可以被哪些接收器接收到
- 通过 putExtra,传递额外的bundle信息
Intent intent = new Intent();intent.setAction(SEND_STATIC_ACTION);intent.putExtra("data","静态广播");sendBroadcast(intent);
接收者-广播接收
创建广播接收器
继承 BroadcastReceiver 类
或直接new该类的对象实例,然后重写方法 onReceive,在该方法中处理接收到的广播消息。
注册广播接收器
注册广播接收器有两种办法,静态注册和动态注册,可以分为两种广播
- 静态广播:常驻内存中,是在Manifest文件中注册的,可在App未启动时就监听广播
- 动态广播:App启动后注册,是在代码中注册以及解除注册的广播,解除注册后,广播也随时结束。
同时注册时,动态优于静态
静态广播
创建广播接收器类
// 静态广播接收器
public class StaticBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();Log.d("BroadcastReceiver","静态广播接收器接受了一个 - "+bundle.getString("data"));}
}
在 Manifest文件中注册广播接收器
<receiver android:name=".broadcastreceiver.receiver.StaticBroadcastReceiver"android:exported="true"><intent-filter><action android:name="send_static_action"></action></intent-filter></receiver>
动态广播
创建广播接收器
直接new该类的对象实例,然后重写方法 onReceive
// 创建广播接收器private BroadcastReceiver dynamicBroadcastReceiver= new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();Log.d("BroadcastReceiver","动态广播接收器接受了一个 - "+bundle.getString("data"));}};
注册广播接收者器类
一般在Activity的onCreate方法中注册
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broadcast_study);// 动态注册广播接收器IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(SEND_DYNAMIC_ACTION);registerReceiver(dynamicBroadcastReceiver,intentFilter);}
解除注册
@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(dynamicBroadcastReceiver);}
无序广播、有序广播
按照广播接收顺序划分
- 无序广播-普通广播:所有接收器接收的广播没有先后顺序,几乎同时收到消息
- 有序广播:发送的广播会按照接收器的优先级顺序被接受,同一时刻只会有一个接收器收到广播,且收到广播之后可以对广播进行截断和修改
有序广播
发送
使用语句 sendOrderedBroadcast
广播接收器
注册时,设置优先级,优先级越大越先收到广播
// 动态注册广播接收器IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(SEND_DYNAMIC_ACTION);intentFilter.setPriority(100);registerReceiver(dynamicBroadcastReceiver, intentFilter);// 注册有序广播// 有序广播设置优先级,优先级越大越先收到IntentFilter intentFilter1 = new IntentFilter();intentFilter1.addAction(SEND_DYNAMIC_ACTION);intentFilter1.setPriority(101);registerReceiver(broadcastReceiver2, intentFilter1);
截断广播
abortBroadcast(); 优先级高的广播接收器截断广播之后,下游的广播就不再会收到。
修改广播
上游的广播 使用 setResultExtras 传递一个新的 Bundle 或者使用 setResultData 传递一个字符串下游使用 getResultExtras 接收 Bundle,使用 getResultData 接收字符串
全局广播、本地广播
按照广播的传播范围划分
- 本地广播:app内部
- 全局广播:整个手机内部
全局广播
普通广播就是全局广播。
一个发送全局广播,在另一个app中接收到的例子:
App1
1.发送广播
Intent intent = new Intent();
intent.setAction(SEND_GLOBAL_ACTION);
intent.putExtra("data_global", "发送了一条全局广播");
sendBroadcast(intent);
App2
1.创建广播接收器,处理接收数据
// 接收来自 Androidsutdio App的广播// 创建广播接收器private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, intent.getExtras().getString("data_global"), Toast.LENGTH_LONG).show();Log.d("接受全局广播", intent.getExtras().getString("data_global"));}};
2.注册广播接收器
action与发送广播的action相同
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 注册广播接收器IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("send_global_action");registerReceiver(broadcastReceiver, intentFilter);}
3.解除广播接收器
@Overrideprotected void onDestroy() {super.onDestroy();// 解除广播接收器unregisterReceiver(broadcastReceiver);}

此时是由App2弹出的这条弹窗。
app2的logcat:

本地广播
只能使用动态注册,因为本地广播只能监听这个app内部的广播,在注册发送广播时,需要使用到LocalBroadcastManager 类。
注册
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broadcast_study);// 注册本地广播 - 只能动态注册LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);IntentFilter local_intentFilter = new IntentFilter();intentFilter1.addAction(SEND_LOCAL_ACTION);localBroadcastManager.registerReceiver(new LocalBroadcastReceiver(),local_intentFilter);}
发送
Intent intent = new Intent();intent.setAction(SEND_LOCAL_ACTION);intent.putExtra("data", "本地广播");localBroadcastManager.sendBroadcast(intent);
解除注册
Intent intent = new Intent();intent.setAction(SEND_LOCAL_ACTION);intent.putExtra("data", "本地广播");localBroadcastManager.sendBroadcast(intent);
广播的作用?
传递信息。
相关文章:
Android --- 广播
广播是什么? 一种相互通信,传递信息的机制,组件内、进程间(App之间) 如何使用广播? 组成部分 发送者-发送广播 与启动其他四大组件一样,广播发送也是使用intent发送。 设置actionÿ…...
AR 眼镜之-蓝牙电话-实现方案
目录 📂 前言 AR 眼镜系统版本 蓝牙电话 来电铃声 1. 🔱 技术方案 1.1 结构框图 1.2 方案介绍 1.3 实现方案 步骤一:屏蔽原生蓝牙电话相关功能 步骤二:自定义蓝牙电话实现 2. 💠 屏蔽原生蓝牙电话相关功能 …...
stl-set
目录 目录 内部自动有序、不含重复元素 关于能不能自己造一个cmp,还挺复杂。 访问:只能用迭代器且受限 添加元素:没有pushback,用insert 复杂度:ologn 编辑 查找元素find()࿱…...
【Stable Diffusion】(基础篇五)—— 使用SD提升分辨率
使用SD提升分辨率 本系列博客笔记主要参考B站nenly同学的视频教程,传送门:B站第一套系统的AI绘画课!零基础学会Stable Diffusion,这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 在前期作画的…...
5.CSS学习(浮动)
浮动(float) 是一种传统的网页布局方式,通过浮动,可以使元素脱离文档流的控制,使其横向排列。 其编写在CSS样式中。 float:none(默认值) 元素不浮动。 float:left 设置的元素在其包含…...
Spring Cloud微服务项目统一封装数据响应体
在微服务架构下,处理服务之间的通信和数据一致性是一个重要的挑战。为了提高开发效率、保证数据的一致性及简化前端开发,统一封装数据响应体是一种非常有效的实践。本文博主将介绍如何在 Spring Cloud 微服务项目中统一封装数据响应体,并分享…...
java算法day20
java算法day20 701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点108 将有序数组转换为二叉搜索树 本次的题目都是用递归函数的返回值来完成,多熟悉这样的用法,很方便。 其实我感觉,涉及构造二叉树的题目,用递归函数的返回值…...
web自动化测试-python+selenium+unitest
文章目录 Web自动化测试工具1. 主流的Web自动化测试工具2. Selenium家族史 Web自动化测试环境搭建基于Python环境搭建示例:通过程序启动浏览器,并打开百度首页,暂停3秒,关闭浏览器 页面元素定位1. 如何进行元素定位?2.…...
LeetCode题练习与总结:组合两个表--175
一、题目描述 SQL Schema > Pandas Schema > 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该表的主…...
数据结构:二叉搜索树(简单C++代码实现)
目录 前言 1. 二叉搜索树的概念 2. 二叉搜索树的实现 2.1 二叉树的结构 2.2 二叉树查找 2.3 二叉树的插入和中序遍历 2.4 二叉树的删除 3. 二叉搜索树的应用 3.1 KV模型实现 3.2 应用 4. 二叉搜索树分析 总结 前言 本文将深入探讨二叉搜索树这一重要的数据结构。二…...
深入理解Prompt工程
前言:因为大模型的流行,衍生出了一个小领域“Prompt工程”,不知道大家会不会跟小编一样,不就是写提示吗,这有什么难的,不过大家还是不要小瞧了Prompt工程,现在很多大模型把会“Prompt工程”作为…...
代码随想录算法训练营day6 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1.两数之和
文章目录 哈希表键值 哈希函数哈希冲突拉链法线性探测法 常见的三种哈希结构集合映射C实现std::unordered_setstd::map 小结242.有效的字母异位词思路复习 349. 两个数组的交集使用数组实现哈希表的情况思路使用set实现哈希表的情况 202. 快乐数思路 1.两数之和思路 总结 今天是…...
vue3 vxe-table 点击行,不显示选中状态,加上设置isCurrent: true就可以设置选中行的状态。
1、上个图,要实现这样的: Vxe Table v4.6 官方文档 2、使用 row-config.isCurrent 显示高亮行,当前行是唯一的;用户操作点击选项时会触发事件 current-change <template><div><p><vxe-button click"sel…...
Linux没有telnet 如何测试对端的端口状态
前段时间有人问uos没有telnet,又找不到包。 追问了一下为什么非要安装telnet,答复是要测试对端的端口号。 这里简单介绍一下,测试端口号的方法有很多,telent只是在windows上经常使用,linux已很少安装并使用该命令&…...
花几千上万学习Java,真没必要!(二十九)
1、基本数据类型包装类: 测试代码1: package apitest.com; //使用Integer类的不同方法处理整数。 //将字符串转换为整数(parseInt)和Integer对象(valueOf), //将整数转换回字符串(…...
C#如何引用dll动态链接库文件的注释
1、dll动态库文件项目生成属性中要勾选“XML文档文件” 注意:XML文件的名字切勿修改。 2、添加引用时XML文件要与DLL文件在同一个目录下。 3、如果要是添加引用的时候XML不在相同目录下,之后又将XML文件复制到相同的目录下,需要删除引用&am…...
WordPress原创插件:自定义文章标题颜色
插件设置截图 文章编辑时,右边会出现一个标题颜色设置,可以设置为任何颜色 更新记录:从输入颜色css代码,改为颜色选择器,更方便! 插件免费下载 https://download.csdn.net/download/huayula/89585192…...
Unity分享:继承自MonoBehaviour的脚步不要对引用类型的字段在声明时就初始化
如果某些字段在每个构造函数中都要进行初始化,很多人都喜欢在字段声明时就进行初始化,对于一个非继承自MonoBehaviour的脚步,这样做是没有问题的,然而继承自MonoBehaviour后就会造成内存的浪费,为什么呢?因…...
.NET Core中如何集成RabbitMQ
在.NET Core中集成RabbitMQ主要涉及到几个步骤,包括安装RabbitMQ的NuGet包、建立连接、定义队列、发送和接收消息等。下面是一个简单的指南来展示如何在.NET Core应用程序中集成RabbitMQ。 目录 1. 安装RabbitMQ.Client NuGet包 2. 建立连接 3. 定义队列 4. 发…...
嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化:智能物流管理系统设计思路流程(附代码示例)
目录 项目概述 系统设计 硬件设计 软件设计 系统架构图 代码实现 1. STM32微控制器与传感器代码 代码讲解 2. MQTT Broker设置 3. 数据接收与处理 代码讲解 4. 数据存储与分析 5. 数据分析与可视化 代码讲解 6. 数据可视化 项目总结 项目概述 随着电子商务的快…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
