BroadcastReceiver中android:exported ="true"的用途是什么?

N S*_*rma 22 android broadcastreceiver

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

<receiver android:exported="true" android:name="com.flyingsoftgames.googleplayquery.QueryReceiver">
    <intent-filter>
       <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

Mou*_*Mou 22

来自开发者指南:

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

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

  • @renzvader 如果未声明导出,则不会构建面向 Android 12 的应用程序 清单合并失败:面向 Android 12 及更高版本的应用程序需要为 android:exported 指定显式值(当相应组件定义了意图过滤器时)。有关详细信息,请参阅 https://developer.android.com/guide/topics/manifest/activity-element#exported。 (3认同)

Har*_*ana 18

机器人:出口

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

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

  • 所以如果我想听系统事件(即蓝牙开/关状态),我应该使用**exported = true**? (8认同)
  • @IgorGanapolsky 在这种情况下,您不必使用此属性。 (2认同)
  • https://developer.android.com/guide/topics/manifest/receiver-element.html#exported 默认值取决于意图过滤器的存在 (2认同)