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

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

一、问题起因

        自 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)

相关文章:

  • 结构化方法SASD
  • openGauss数据库使用
  • 谈谈 Node.js 中的文件系统(fs)模块,如何进行文件读写操作?
  • CSS—背景属性与盒子模型(border、padding、margin)
  • 越南SD-WAN跨境组网专线助力制造业访问国内 OA、ERP系统难题
  • Go基于协程池的延迟任务调度器
  • 《Kafka 理解: Broker、Topic 和 Partition》
  • 【leetcode】二分查找专题
  • 打造爆款秘籍:利用ARA数据优化亚马逊广告策略
  • STM32呼吸灯实验手册(TIM定时器)
  • Linux网络 数据链路层
  • StableDiffusion打包 项目迁移 项目分发 1
  • 《深度学习实战》第5集:生成对抗网络(GAN)与图像生成
  • 矩阵系列 题解
  • Spring的@Configuration注解:深入解析与实战指南
  • spring--ApplicationContext和BeanFactory的区别(源码)
  • MYSQL数据库创建命令
  • 深入解析/etc/hosts.allow与 /etc/hosts.deny:灵活控制 Linux 网络访问权限
  • MySQL 实验1:Windows 环境下 MySQL5.5 安装与配置
  • 电路中如何计算电容容值大小
  • b2c seo/北京seo执行
  • 商丘做网站优化的公司有哪些/班级优化大师免费下载电脑版
  • 创意福州网站建设/南京网站设计优化公司
  • 网站开发要什么软件有哪些/链接搜索
  • 南宁网站建设加q.479185700/国内5大搜索引擎
  • 特克斯与凯科斯群岛域名官方网站/近期舆情热点事件