Android 13中RECEIVER_EXPORTED官方说明存疑:测试与文档不符
为什么设置RECEIVER_NOT_EXPORTED仍能接收AIRPLANE_MODE广播?
先明确Google官方给出的标记说明:
选择广播接收器是否对外暴露并对设备上其他应用可见。若接收器监听系统或其他应用(甚至您自己开发的其他应用)发送的广播,请使用RECEIVER_EXPORTED标记;若仅监听您自己应用发送的广播,请使用RECEIVER_NOT_EXPORTED标记。
出现这个看似矛盾的情况,核心原因在于系统广播的特殊处理逻辑:
RECEIVER_EXPORTED/RECEIVER_NOT_EXPORTED的核心作用是限制**其他应用(包括第三方应用、您开发的其他独立应用)**能否向该接收器发送广播,但系统本身拥有最高权限,对于部分全局通知类的系统广播(比如AIRPLANE_MODE),系统会主动遍历所有已安装应用的接收器,无论其是否设置为导出,都会推送该广播。AIRPLANE_MODE这类广播的设计目的是通知所有应用设备状态的全局变化,它的发送逻辑跳过了普通跨应用广播的权限校验,不需要接收器主动暴露给外部就能接收。- Google的文档说明是通用规则,部分系统广播属于例外场景,这类特殊广播的处理逻辑是系统层面的默认行为,不受
exported属性的约束。
内容的提问来源于stack exchange,提问作者skytree
相关产品推荐
相关产品推荐

