2016-07-13 49 views
5
<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> 

我不明白是否需要通知。 如果這是真的任何應用程序可以通過這些操作調用我的接收器?所以如果我把它弄錯了,系統可以把這些動作發送給我的接收器?Android:導出接收者的屬性是什麼意思?

+0

只需閱讀[官方文檔](https://developer.android.com/guide/topics/manifest/receiver-element.html) – dipdipdip

+0

例如:「廣播接收器是否可以從外部接收消息它的應用程序「......這是什麼意思呢?它也涉及系統嗎? – user3290180

回答

11

我不明白是否需要通知它。如果這是真的任何 應用程序可以通過這些操作調用我的接收器?因此,如果我將其設爲假 系統可以將操作發送給我的接收器?

其實,其他應用程序不能「打電話給你的接收器」。其他應用程序可以發送廣播Intent s。系統然後會呼叫所有註冊的接收者。

一般來說,你不應該擔心這一點。這些廣播Intent中的大多數都受到保護,因此只有系統應用程序才能廣播它們。例如,其他應用程序嘗試廣播BOOT_COMPLETED的嘗試將被忽略。如果BroadcastReceiver被流氓應用程序觸發,會發生什麼情況,因爲它會播放CONNECTIVITY_CHANGE?可能沒有什麼,因爲你的應用無論如何都應該檢查onReceive()中的真正連接狀態,如果沒有任何變化,你可以忽略它。

此外,您不需要指定android:enabled="true",因爲這是默認狀態。你也不需要指定android:exported="true",因爲你有一個<intent-filter>連接到你的<receiver>,它會自動設置android:exportedtrue

2

如果您設置了android:exported =「false」,意味着接收器僅用於應用程序內部使用。

注意:此屬性不是限制廣播接收機外部曝光的唯一方法。您還可以使用權限來限制可以發送消息的外部實體

+1

這是錯誤的。如果你設置了'android:exported =「true」',接收者是公共的,而不是應用程序內部的。由於聲明中存在一個'','android:exported =「true」'是多餘的,因爲如果存在'',默認設置爲'true'。如果您想將此接收器限制爲僅適用於應用程序,則需要明確設置'android:exported =「false」'。 –

+1

@DavidWasser對不起我的錯誤,編輯了我的答案,謝謝注意 – SaravInfern