首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当exported=false时接收系统广播正常吗?

当exported=false时接收系统广播正常吗?
EN

Stack Overflow用户
提问于 2016-05-22 05:31:20
回答 3查看 384关注 0票数 1

背景

我有一个广播接收器,它声明系统广播的意图筛选器,如下所示:

代码语言:javascript
复制
<receiver android:name=".StartAppReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

接收器正在正确地接收广播。然而,根据文档,这个接收器是导出的,所以其他应用程序可以发送意图到这个接收器。

问题

为了防止其他应用程序向接收方发送意图,我可以将其标记为不导出(android:exported="false")。我预计这也会阻止系统向其发送意图,从而阻止它接收BOOT_COMPLETED广播。

然而,尽管没有导出,它仍然接收BOOT_COMPLETED广播,这不是我所期望的行为。我已经证实了这种行为:

  • 索尼Xperia M (Android 4.3和Android 7.1)
  • Genymotion模拟器(Android 6)
  • 官方仿真器(Android 4.0.1)

我也在android.intent.action.MY_PACKAGE_REPLACED广播中尝试过这一点,并得到了同样的结果。

这是我想要的行为,但我希望exported="false"阻止它接收系统广播,因为它们不是来自我的应用程序。

而不是导出的广播接收器中接收系统广播是正常的吗?我能依靠这种行为吗?

EN

回答 3

Stack Overflow用户

发布于 2016-09-29 23:11:49

在我的经验中,模拟器并不是调用应用程序的良好测试平台。我使用仿真器进行布局、调整大小和呈现GL线程。这可能会帮助你走上正确的道路。

您可以在您的onReceive()中限制和查找名为意图的包,并筛选出它。

How to get the sender of an Intent?

干杯!

票数 0
EN

Stack Overflow用户

发布于 2022-08-10 09:19:55

从- https://developer.android.com/guide/topics/manifest/receiver-element

广播接收器是否可以从其应用程序之外的非系统源接收消息--如果可以,则为"true“,如果不能,则为"false”。如果“”为"false",则广播接收方只能接收系统发送的消息、同一应用程序的组件或具有相同用户ID.的应用程序。

票数 0
EN

Stack Overflow用户

发布于 2016-05-22 05:39:18

为了防止接收广播

代码语言:javascript
复制
enabled:false

在你的接收器标签里

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37370896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档