导出= false时接收系统广播是否正常?

时间:2016-05-22 05:31:21

标签: android broadcastreceiver intentfilter

背景

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

<receiver android:name=".StartAppReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

接收方正确接收广播。但是,根据文档,此接收器已导出,因此其他应用程序可以向此接收器发送意图。

问题

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

然而,尽管没有被导出,它仍然会收到BOOT_COMPLETED广播,这不是我期望的行为。我已经确认了这种行为:

  • Sony Xperia M(Android 4.3&amp; Android 7.1)
  • Genymotion Emulator(Android 6)
  • 官方模拟器(Android 4.0.1)

我也尝试过android.intent.action.MY_PACKAGE_REPLACED广播并得到相同的结果。

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

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

2 个答案:

答案 0 :(得分:0)

在我的经验中,模拟器不能作为调用应用程序的良好测试平台。我使用模拟器进行布局大小调整和渲染GL线程。这可以帮助您走上正确的道路。

您可以限制并找出名为intent的包,并在onReceive()中过滤掉。

How to get the sender of an Intent?

干杯!

答案 1 :(得分:-1)

为防止接收广播只是放

enabled:false
接收者标签中的