背景
我有一个广播接收器,它声明系统广播的意图筛选器,如下所示:
<receiver android:name=".StartAppReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>接收器正在正确地接收广播。然而,根据文档,这个接收器是导出的,所以其他应用程序可以发送意图到这个接收器。
问题
为了防止其他应用程序向接收方发送意图,我可以将其标记为不导出(android:exported="false")。我预计这也会阻止系统向其发送意图,从而阻止它接收BOOT_COMPLETED广播。
然而,尽管没有导出,它仍然接收BOOT_COMPLETED广播,这不是我所期望的行为。我已经证实了这种行为:
我也在android.intent.action.MY_PACKAGE_REPLACED广播中尝试过这一点,并得到了同样的结果。
这是我想要的行为,但我希望exported="false"阻止它接收系统广播,因为它们不是来自我的应用程序。
在而不是导出的广播接收器中接收系统广播是正常的吗?我能依靠这种行为吗?
发布于 2016-09-29 23:11:49
在我的经验中,模拟器并不是调用应用程序的良好测试平台。我使用仿真器进行布局、调整大小和呈现GL线程。这可能会帮助你走上正确的道路。
您可以在您的onReceive()中限制和查找名为意图的包,并筛选出它。
How to get the sender of an Intent?
干杯!
发布于 2022-08-10 09:19:55
从- https://developer.android.com/guide/topics/manifest/receiver-element
广播接收器是否可以从其应用程序之外的非系统源接收消息--如果可以,则为"true“,如果不能,则为"false”。如果“”为"false",则广播接收方只能接收系统发送的消息、同一应用程序的组件或具有相同用户ID.的应用程序。
发布于 2016-05-22 05:39:18
为了防止接收广播
enabled:false在你的接收器标签里
https://stackoverflow.com/questions/37370896
复制相似问题