【安卓】BroadcastReceiver 动态声明为 RECEIVER_NOT_EXPORTED 后无法接收任何 Intent 的问题

news/2025/3/1 8:27:37/

一、问题起因

        自 Android 14 (API 级别 34) 起,使用 context.registerReceiver(receiver, filter, flags) 动态注册广播接收器时,必须显式地声明 RECEIVER_NOT_EXPORTED 或 RECEIVER_EXPORTED 。

       如果声明为 RECEIVER_EXPORTED ,任何第三方应用都能向你的应用发送不受保护的广播,有潜在的安全隐患。

上下文注册的接收器https://developer.android.com/develop/background-work/background-tasks/broadcasts?hl=zh-cn#context-registered-receivers        然而,当我根据文档内容将广播接收器声明为 RECEIVER_NOT_EXPORTED 时,发现这个接收器接收不到任何 Intent 。

二、问题原因

        由于文档未提及广播的发送方法,因此我仍使用老方法:

val statisticsIntent = Intent("STATISTICS")
sendBroadcast(statisticsIntent)

        经过搜索,我在安卓14行为变更文档中找到了原因:必须为 Intent 指定 package 。

对隐式 intent 和待处理 intent 的限制https://developer.android.com/about/versions/14/behavior-changes-14?hl=zh-cn#safer-intents

三、解决方法

val statisticsIntent = Intent("STATISTICS").apply { `package` = packageName
}
sendBroadcast(statisticsIntent)

http://www.ppmy.cn/news/1575721.html

相关文章

IDEA相关配置

1、IDEA基础调试方法 1.1、创建文件实现自动增加注释 /** * Created with IntelliJ IDEA. * Description: * User: ${USER} * Date: ${YEAR}-${MONTH}-${DAY} * Time: ${TIME} */接下来在 src 文件夹下新创建文件后自动会出现 如果想修改名字,那可以直接在上边插入…

大模型在脑梗死预测及治疗方案制定中的应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、脑梗死概述 2.1 脑梗死的定义与分类 2.2 脑梗死的发病机制与病理生理过程 2.3 脑梗死的临床表现与诊断方法 三、大模型技术原理与应用现状 3.1 大模型的基本概念与技术架构 3.2 大模型…

测试用例详解

一、通用测试用例八要素   1、用例编号;    2、测试项目;   3、测试标题; 4、重要级别;    5、预置条件;    6、测试输入;    7、操作步骤;    8、预期输出 二、具体分析通…

微服务面试题及原理

1. Springcould spring could五大组件 注册中心 负载均衡 网关 远程调用 服务熔断 Eureka:注册中心Ribbon:负载均衡Feign :远程调用Hystrix:服务熔断Zuul/Gateway:网关 1.1 注册中心 1.1.1 eureka eureka是spring…

无人机自主导航与避障技术!

自主导航的实现 环境感知:通过传感器(如摄像头、激光雷达、超声波传感器等)获取周围环境信息。 地图构建:利用SLAM(同步定位与地图构建)技术,实时生成环境地图并确定无人机的位置。 路径规划…

计算机组成原理知识点精汇(一)计算机基础知识

一、冯诺伊曼计算机的特点 (1)计算机由运算器、控制器、存储器、输人设备和输出设备五大部件组成。 (2)程序和数据存放在同一存储器中,并按地址寻访。 (3)指令和数据均采用二进制运算。 (4)指令由操作码和地址码组成,操作码用来表示操作的类型&#…

解释Promise的工作原理及其状态

Promise的工作原理及其状态 1. 什么是Promise? Promise是JavaScript中的一种用于处理异步操作的对象。它代表一个可能在未来某个时间点完成的操作,并且可以有三种状态:待定(pending)、已解决(fulfilled&a…

游戏引擎学习第124天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾/复习 今天是继续完善和调试多线程的任务队列。之前的几天,我们已经介绍了多线程的一些基础知识,包括如何创建工作队列以及如何在线程中处理任务。今天,重点是解决那些我们之前没有注意到…