Android:导出接收者属性的含义是什么?

时间:2016-07-13 08:36:23

标签: android broadcastreceiver action

   <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>

我不明白是否需要通知。 如果确实有任何应用程序可以通过这些操作调用我的接收器?那么如果我把它弄错了,系统可以将动作发送给我的接收器吗?

2 个答案:

答案 0 :(得分:16)

  

我不明白是否需要通知。如果确实如此   应用可以通过这些操作呼叫我的接收器?所以,如果我做错了   系统可以将动作发送给我的接收器吗?

实际上,其他应用无法“呼叫您的接收器”。其他应用只能发送广播Intent。然后,系统将呼叫所有已注册的接收器。

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

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

答案 1 :(得分:3)

如果设置perl -pe 's/(?<=Tree)(\d+)/$1 - 1/ge' ,则表示接收器仅用于应用程序内部

  

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