sky*_*ree 6 android broadcastreceiver android-13
这是谷歌对 RECEIVER_EXPORTED、RECEIVER_NOT_EXPORTED 的解释:
\n\n\n选择广播接收器是否应导出并\n对设备上的其他应用可见。如果此接收器正在侦听\n从系统或其他应用程序\xe2\x80\x94甚至您拥有的\n其他应用程序\n\xe2\x80\x94发送的广播,请使用 RECEIVER_EXPORTED 标志。如果此接收器仅侦听您的应用发送的广播,请使用\nRECEIVER_NOT_EXPORTED 标志。
\n
当我想使用从系统发送的广播时,谷歌说我需要使用 RECEIVER_EXPORTED 但是当我用 和 进行测试"android.intent.action.AIRPLANE_MODE"时"RECEIVER_NOT_EXPORTED"进行测试时。\n我收到了一个广播事件。\n有人能解释一下这句话吗?
Lit*_*tte 12
我收到此错误:
\n\n\n必须是以下一项或多项:Context.RECEIVER_VISIBLE_TO_INSTANT_APPS、\nandroid.content.Context.RECEIVER_EXPORTED、\nandroid.content.Context.RECEIVER_NOT_EXPORTED
\n
即使我将其设置为 ,RECEIVER_NOT_EXPORTED如果将其设置为 ,我也会收到相同的错误RECEIVER_EXPORTED。就好像我对界面不满意@RegisterReceiverFlags。
它最初建议RECEIVER_NOT_EXPORTED作为首选,但当它显示此错误时,它建议我将其更改为RECEIVER_VISIBLE_TO_INSTANT_APPS. 如果我将其设置为该值,它会消除错误,但随后将其突出显示为黄色,并建议我添加其他两个 \xe2\x80\xa6 之一,如果我包含多个标志,它仍然会出错。
编辑:好的,我通过使用ContextCompat.registerReceiver()而不是常规来解决这个问题registerReceiver(),这也需要使用ContextCompat.RECEIVER_NOT_EXPORTED而不是Context.RECEIVER_NOT_EXPORTED。
Yve*_*erm 10
他们的文档中可能有错误或者他们改变了主意,因为根据ContextCompat 文档,您可以使用:
RECEIVER_NOT_EXPORTED 如果您只希望接收器能够接收来自系统或您自己的应用程序的广播。
在我看来,这样更安全,因为我们不希望我们的接收器对所有应用程序开放只是为了获取系统广播。
(已编辑)我还在RECEIVER_NOT_EXPORTED 文档中发现了这一点:
与使用“exported=false”标记静态注册接收器具有相同的行为
当我查看接收者文档时,对于导出的属性,我读到:
如果为“false”,则广播接收器只能接收由系统、同一应用程序的组件或具有相同用户 ID 的应用程序发送的消息
所以我有足够的信心,实现是连贯的,并且文档中存在一个小错误
| 归档时间: |
|
| 查看次数: |
22624 次 |
| 最近记录: |