【发布时间】:2016-11-20 11:32:58
【问题描述】:
背景
我有一个广播接收器,它为系统广播声明了一个意图过滤器,如下所示:
<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" 阻止它接收系统广播,因为它们不是来自我的应用程序。
我可以在未导出的广播接收器中接收系统广播是否正常?我可以依赖这种行为吗?
【问题讨论】:
标签: android broadcastreceiver intentfilter