【问题标题】:What is the use of android:exported="true" in BroadcastReceiverBroadcastReceiver中android:exported="true"有什么用
【发布时间】:2014-12-13 11:19:54
【问题描述】:

您好,我看到一些广播接收器在 Android Manifest.xml 中使用此标签 android:exported="true" 进行注册。

<receiver android:exported="true" android:name="com.flyingsoftgames.googleplayquery.QueryReceiver">
    <intent-filter>
       <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

android:exported="true"在Android中注册广播接收器到底有什么用?

提前致谢。

【问题讨论】:

    标签: android broadcastreceiver


    【解决方案1】:

    来自Developer Guide

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

    此属性不是限制广播接收器外部曝光的唯一方法。您还可以使用权限来限制可以向其发送消息的外部实体(请参阅权限属性)。

    【讨论】:

    • 嗨@Mou,如果没有声明android:exported 会有安全风险吗?
    • 这里所说的“用户ID”是什么意思“广播接收者唯一能接收的消息是由相同应用程序的组件或具有相同用户ID的应用程序发送的消息”
    • @RishabhDhiman 这里的“用户ID”主要是指应用程序ID
    • @renzvader 面向 Android 12 的应用在未声明导出的情况下将无法构建清单合并失败:针对 Android 12 及更高版本的应用需要为 android 指定显式值:在相应组件具有意图时导出过滤器定义。详情请见developer.android.com/guide/topics/manifest/…
    【解决方案2】:

    android:exported

    true : 广播接收器可以接收同一或其他应用程序发送的事件

    false‍:广播接收器可以接收同一个应用程序发送的事件

    【讨论】:

    • 所以如果我想监听系统事件(即蓝牙开/关状态),我应该使用 exported=true
    • @IgorGanapolsky 在这种情况下,您不必使用此属性。
    • developer.android.com/guide/topics/manifest/… 默认值取决于意图过滤器的存在
    猜你喜欢
    • 2022-08-11
    • 1970-01-01
    • 2012-05-15
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2019-12-29
    • 1970-01-01
    相关资源
    最近更新 更多