【问题标题】:Android: what's the meaning of exported receiver's attribute?Android:导出的接收者属性是什么意思?
【发布时间】:2016-07-13 08:36:22
【问题描述】:
   <receiver
        android:name="MyReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>  
  </receiver>

我不明白是否需要通知。 如果这是真的,任何应用程序都可以通过这些操作呼叫我的接收器吗?因此,如果我将其设为 false,系统可以将操作发送给我的接收者吗?

【问题讨论】:

标签: android broadcastreceiver action


【解决方案1】:

我不明白是否需要通知。如果它是真的任何 应用程序可以通过这些操作呼叫我的接收器吗?所以如果我把它弄错了 系统可以将动作发送给我的接收者吗?

实际上,其他应用程序无法“呼叫您的接收者”。其他应用程序可以发送广播Intents。然后系统将调用所有注册的接收者。

一般来说,您不必担心这一点。大多数这些广播Intents 都受到保护,因此只有系统应用程序才能广播它们。例如,另一个应用程序尝试广播 BOOT_COMPLETED 将被忽略。如果您的BroadcastReceiver 被流氓应用程序触发,因为它广播CONNECTIVITY_CHANGE,会发生什么?可能没什么,因为您的应用无论如何都应该检查onReceive() 中的真实连接状态,如果没有任何更改,您可以忽略它。

另外,您不需要指定android:enabled="true",因为这是默认状态。您也不需要指定android:exported="true",因为您的&lt;receiver&gt; 附加了一个&lt;intent-filter&gt;,它会自动将android:exported 设置为true

【讨论】:

  • 显然Android 12 需要为receiver 设置android:exported 属性。
  • 只是想确认exported默认值true:developer.android.com/guide/topics/manifest/service-element
  • @JCarlosR exported默认值true 仅当您声明了&lt;intent-filter&gt;。此外,如果您的应用面向 Android 12 或更高版本,并且组件具有 &lt;intent-filter&gt; 声明,您必须明确声明 exported(没有默认值),请参阅@ 987654322@
【解决方案2】:

如果您设置android:exported ="false",则意味着接收器仅供应用程序内部使用。

注意:此属性不是限制广播接收器外部暴露的唯一方法。您还可以使用权限来限制 可以向其发送消息的外部实体

【讨论】:

  • 这是错误的。如果您设置android:exported="true",接收者是公共的,而不是应用程序内部的。由于 声明中存在&lt;intent-filter&gt;,因此android:exported="true" 是多余的,因为如果存在&lt;intent-filter&gt;,则默认设置为true。如果您想将此接收器限制为仅限应用程序,则需要显式设置android:exported="false"
  • @DavidWasser 抱歉我的错误,已编辑我的答案,感谢您的关注
  • 答案中提到的权限请参见此处:developer.android.com/training/permissions/…
【解决方案3】:

添加到@SaravInfern 的答案。以下是限制可以发送接收者消息的外部实体的相关权限文档:

https://developer.android.com/training/permissions/restrict-interactions#broadcast-receivers

【讨论】:

    猜你喜欢
    • 2018-07-17
    • 2019-09-13
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2016-04-06
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多