2012-02-14 51 views
20

通常有兩種服務涉及實現Android身份驗證器 - 身份驗證服務返回身份驗證器,以及提供同步適配器的同步服務。這個問題是專門關於身份驗證服務,雖然在most examples兩個服務給出android:exported="true"屬性在AndroidManifest.xml,如:對於認證服務來說,android:exported =「true」真的是必需的嗎?

<service 
    android:name=".authenticator.AuthenticationService" 
    android:exported="true"> 
    <intent-filter> 
     <action 
      android:name="android.accounts.AccountAuthenticator" /> 
    </intent-filter> 
    <meta-data 
     android:name="android.accounts.AccountAuthenticator" 
     android:resource="@xml/authenticator" /> 
</service> 

除去身份驗證服務的屬性,似乎沒有任何效果(測試升級Froyo,薑餅) - 認證代碼繼續工作很好 - 標誌實際上是必要的嗎?

回答

35

好了,通過閱讀文檔此回答自己的documentationexported屬性說:

的默認值取決於服務是否包含意圖 過濾器。沒有任何過濾器意味着它可以通過指定其確切的類名稱而僅調用 。這意味着該服務是 僅用於應用程序內部使用(因爲其他人不知道類名稱 )。所以在這種情況下,默認值是「false」。 另一方面,至少存在一個過濾器意味着 該服務旨在供外部使用,因此默認值爲 「true」。

所有認證服務有一個意圖過濾器 - 爲AbstractAccountAuthenticator文檔說:

爲了)的認證一絕......寫 返回getIBinder結果的服務(在該服務的 onBind(android.content.Intent)以意向調用時的動作爲 ACTION_AUTHENTICATOR_INTENT。

這需要一個意圖過濾器,因此服務導出的默認值是true。所以這個問題的答案是「不,該屬性是而不是必要的 - 因爲它默認是真的」

+1

由於Android 4.2,android:exported的默認值現在是false。 – 2016-09-30 06:24:08

+0

你能鏈接到一些文件,顯示?與上面鏈接的Android文檔仍然說:'...另一方面,至少存在一個過濾器意味着該服務旨在供外部使用,因此默認值爲「true」。 – 2016-09-30 10:47:46

+1

我看到這個文檔:https://developer.android.com/about/versions/android-4.2.html - 它說'內容提供者不再默認導出。' - 但只涉及內容提供者,而不是服務,我認爲? – 2016-09-30 10:49:35

相關問題