android13 RECEIVER_EXPORTED的解释正确吗?

mwkjh3gx  于 2023-11-15  发布在  Android
关注(0)|答案(3)|浏览(958)

选择是否应导出广播接收器并使其对设备上的其他应用可见。如果此接收器正在侦听从系统或其他应用(甚至是您拥有的其他应用)发送的广播,请使用RECEIVER_EXPORTED标志。如果此接收器仅侦听您的应用发送的广播,请使用RECEIVER_NOT_EXPORTED标志。
这是谷歌解释RECEIVER_EXPORTED,RECEIVER_NOT_EXPORTED
link to explanation
当我想使用从系统发送的广播谷歌说我需要使用RECEIVER_EXPORTED
但是当我用“android.intent.action.AIRPLANE_MODE”和“RECEIVER_NOT_EXPORTED”测试时,
我收到了广播事件。
有人能解释一下这句话吗?

3phpmpom

3phpmpom1#

我得到这个错误:
必须是以下一项或多项:Context.RECEIVER_VISIBLE_TO_EXPORANT_APPS,android.content.Context.RECEIVER_EXPORTED,android.content.Context.RECEIVER_NOT_EXPORTED
即使我把它设置为RECEIVER_NOT_EXPORTED,如果我把它设置为RECEIVER_EXPORTED,我也会得到同样的错误,就好像我不满足@RegisterReceiverFlags接口一样。


的数据
它最初建议RECEIVER_NOT_EXPORTED作为首选,但当它显示此错误时,它建议我将其更改为RECEIVER_VISIBLE_TO_INSTANT_APPS。如果我将其设置为RECEIVER_VISIBLE_TO_INSTANT_APPS,它将删 debugging 误,但随后将其突出显示为黄色,并建议我添加其他两个中的一个.

**编辑:**好的,我通过使用ContextCompat.registerReceiver()而不是常规的registerReceiver()来修复这个问题,这也需要使用ContextCompat.RECEIVER_NOT_EXPORTED而不是Context.RECEIVER_NOT_EXPORTED

v09wglhw

v09wglhw2#

他们的文档中可能有错误,或者他们改变了主意,因为根据ContextCompat文档,您可以用途:
RECEIVER_NOT_EXPORTED如果您只希望接收器能够接收来自系统或您自己的应用的广播。
在我看来,这样更安全,因为我们不想让我们的接收器对所有应用程序开放,只是为了获得系统广播。
我在RECEIVER_NOT_EXPORTED文档中也发现了这一点:
与用“exported=false”标记静态注册的接收器具有相同的行为
当我查看receiver documentation时,对于导出的属性,我读到:
如果为“false”,则广播接收器只能接收系统、同一应用程序的组件或具有相同用户ID的应用程序发送的消息
所以我有足够的信心实现是一致的,文档中有一个小错误

ttvkxqim

ttvkxqim3#

不幸的是,我也遇到过类似的情况。也许这是IDE的问题?我比较了以下编写方法,发现添加if语句块可以解决红色警告,尽管它总是' false '。
enter image description here

相关问题