当前位置: 首页 > news >正文

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 --- 广播

广播是什么&#xff1f; 一种相互通信&#xff0c;传递信息的机制&#xff0c;组件内、进程间&#xff08;App之间&#xff09; 如何使用广播&#xff1f; 组成部分 发送者-发送广播 与启动其他四大组件一样&#xff0c;广播发送也是使用intent发送。 设置action&#xff…...

AR 眼镜之-蓝牙电话-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 蓝牙电话 来电铃声 1. &#x1f531; 技术方案 1.1 结构框图 1.2 方案介绍 1.3 实现方案 步骤一&#xff1a;屏蔽原生蓝牙电话相关功能 步骤二&#xff1a;自定义蓝牙电话实现 2. &#x1f4a0; 屏蔽原生蓝牙电话相关功能 …...

stl-set

目录 目录 内部自动有序、不含重复元素 关于能不能自己造一个cmp&#xff0c;还挺复杂。 访问&#xff1a;只能用迭代器且受限 添加元素&#xff1a;没有pushback&#xff0c;用insert 复杂度&#xff1a;ologn ​编辑 查找元素find&#xff08;&#xff09;&#xff1…...

【Stable Diffusion】(基础篇五)—— 使用SD提升分辨率

使用SD提升分辨率 本系列博客笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 在前期作画的…...

5.CSS学习(浮动)

浮动&#xff08;float&#xff09; 是一种传统的网页布局方式&#xff0c;通过浮动&#xff0c;可以使元素脱离文档流的控制&#xff0c;使其横向排列。 其编写在CSS样式中。 float:none(默认值) 元素不浮动。 float:left 设置的元素在其包含…...

Spring Cloud微服务项目统一封装数据响应体

在微服务架构下&#xff0c;处理服务之间的通信和数据一致性是一个重要的挑战。为了提高开发效率、保证数据的一致性及简化前端开发&#xff0c;统一封装数据响应体是一种非常有效的实践。本文博主将介绍如何在 Spring Cloud 微服务项目中统一封装数据响应体&#xff0c;并分享…...

java算法day20

java算法day20 701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点108 将有序数组转换为二叉搜索树 本次的题目都是用递归函数的返回值来完成&#xff0c;多熟悉这样的用法&#xff0c;很方便。 其实我感觉&#xff0c;涉及构造二叉树的题目&#xff0c;用递归函数的返回值…...

web自动化测试-python+selenium+unitest

文章目录 Web自动化测试工具1. 主流的Web自动化测试工具2. Selenium家族史 Web自动化测试环境搭建基于Python环境搭建示例&#xff1a;通过程序启动浏览器&#xff0c;并打开百度首页&#xff0c;暂停3秒&#xff0c;关闭浏览器 页面元素定位1. 如何进行元素定位&#xff1f;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工程

前言&#xff1a;因为大模型的流行&#xff0c;衍生出了一个小领域“Prompt工程”&#xff0c;不知道大家会不会跟小编一样&#xff0c;不就是写提示吗&#xff0c;这有什么难的&#xff0c;不过大家还是不要小瞧了Prompt工程&#xff0c;现在很多大模型把会“Prompt工程”作为…...

代码随想录算法训练营day6 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1.两数之和

文章目录 哈希表键值 哈希函数哈希冲突拉链法线性探测法 常见的三种哈希结构集合映射C实现std::unordered_setstd::map 小结242.有效的字母异位词思路复习 349. 两个数组的交集使用数组实现哈希表的情况思路使用set实现哈希表的情况 202. 快乐数思路 1.两数之和思路 总结 今天是…...

vue3 vxe-table 点击行,不显示选中状态,加上设置isCurrent: true就可以设置选中行的状态。

1、上个图&#xff0c;要实现这样的&#xff1a; Vxe Table v4.6 官方文档 2、使用 row-config.isCurrent 显示高亮行&#xff0c;当前行是唯一的&#xff1b;用户操作点击选项时会触发事件 current-change <template><div><p><vxe-button click"sel…...

Linux没有telnet 如何测试对端的端口状态

前段时间有人问uos没有telnet&#xff0c;又找不到包。 追问了一下为什么非要安装telnet&#xff0c;答复是要测试对端的端口号。 这里简单介绍一下&#xff0c;测试端口号的方法有很多&#xff0c;telent只是在windows上经常使用&#xff0c;linux已很少安装并使用该命令&…...

花几千上万学习Java,真没必要!(二十九)

1、基本数据类型包装类&#xff1a; 测试代码1&#xff1a; package apitest.com; //使用Integer类的不同方法处理整数。 //将字符串转换为整数&#xff08;parseInt&#xff09;和Integer对象&#xff08;valueOf&#xff09;&#xff0c; //将整数转换回字符串&#xff08;…...

C#如何引用dll动态链接库文件的注释

1、dll动态库文件项目生成属性中要勾选“XML文档文件” 注意&#xff1a;XML文件的名字切勿修改。 2、添加引用时XML文件要与DLL文件在同一个目录下。 3、如果要是添加引用的时候XML不在相同目录下&#xff0c;之后又将XML文件复制到相同的目录下&#xff0c;需要删除引用&am…...

WordPress原创插件:自定义文章标题颜色

插件设置截图 文章编辑时&#xff0c;右边会出现一个标题颜色设置&#xff0c;可以设置为任何颜色 更新记录&#xff1a;从输入颜色css代码&#xff0c;改为颜色选择器&#xff0c;更方便&#xff01; 插件免费下载 https://download.csdn.net/download/huayula/89585192…...

Unity分享:继承自MonoBehaviour的脚步不要对引用类型的字段在声明时就初始化

如果某些字段在每个构造函数中都要进行初始化&#xff0c;很多人都喜欢在字段声明时就进行初始化&#xff0c;对于一个非继承自MonoBehaviour的脚步&#xff0c;这样做是没有问题的&#xff0c;然而继承自MonoBehaviour后就会造成内存的浪费&#xff0c;为什么呢&#xff1f;因…...

.NET Core中如何集成RabbitMQ

在.NET Core中集成RabbitMQ主要涉及到几个步骤&#xff0c;包括安装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. 数据可视化 项目总结 项目概述 随着电子商务的快…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...