Android: exported receiver的属性是什么意思?

Android: what's the meaning of exported receiver's attribute?

   <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:exported ="false",则意味着接收器仅供 应用程序内部 使用。

Note: This attribute is not the only way to limit a broadcast receiver's external exposure. You can also use a permission to limit the external entities that can send it messages

I don't understand if it's needed to be notified. If it were true any app could call my receiver with those actions? So If I make it false the system can send the actions to my receiver?

实际上,其他应用不能"call your receiver"。其他应用程序可以只发送广播 Intents。然后系统将呼叫所有注册的接收者。

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

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

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

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