Android:可以更改清单中的BroadcastReceiver属性,防止用户更新应用时接收广播吗?

时间:2018-05-18 04:30:05

标签: android broadcastreceiver

最初在我的应用程序中,我在清单中设置了此接收器:

<receiver android:name = ".BootReceiver" 
    android:exported = "false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

但是,在新的更新中,我删除了属性android:exported = "false" 从分析来看,BootReceiver电话有很大的下降。可以更改更新的应用程序中的属性导致BootReceiver不再被触发吗?

3 个答案:

答案 0 :(得分:1)

不,它会激发。只有外部应用程序无法触发该广播来操纵你的app.Hence,它会按原样运行。谢谢!

答案 1 :(得分:1)

android:exported = "false"表示,广播接收者可以接收的唯一消息是由具有相同用户ID的相同应用程序或应用程序的组件发送的消息。

如果您将导出设置为false,操作系统将无法触发您的BootReceiver。结果它没有被解雇。

注意:

如果至少有一个过滤器,则意味着广播接收器旨在接收系统或其他应用程序广播的意图,因此默认值为&#34; true&#34;。

避免android:exported = "false"继续接收广播

答案 2 :(得分:0)

来自doc:

  

广播接收器是否可以接收来自的消息   其应用之外的来源 - &#34; true&#34;如果它可以,&#34;假&#34;如果   不。如果&#34; false&#34;,广播接收器可以接收的唯一消息   是由相同应用程序或应用程序的组件发送的那些   具有相同的用户ID。默认值取决于是否   广播接收器包含意图过滤器没有任何过滤器   意味着它只能由指定它的Intent对象调用   确切的班级名称。这意味着接收器仅用于   应用程序内部使用(因为其他人通常不会知道   班级名称)。所以在这种情况下,默认值为&#34; false&#34;。在   另一方面,至少有一个过滤器的存在意味着   广播接收器旨在接收由广播播出的意图   系统或其他应用程序,因此默认值为&#34; true&#34;。

表示如果你删除了属性,那么因为你有意图过滤器,因此默认情况下它将是真的。