¿Es android: exportado = "true" realmente necesario para un servicio de autenticación?

Por lo general, hay dos servicios involucrados en la implementación de un autenticador de Android: el servicio de autenticación para devolver un autenticador y el servicio de sincronización que proporciona un adaptador de sincronización. Esta pregunta es específicamente sobre el servicio de autenticación, aunque en la mayoría de los ejemplos se dan los dos servicios al atributo android:exported="true" en el AndroidManifest.xml , por ejemplo:

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

Eliminar el atributo del servicio de autenticación parece no tener ningún efecto (probado Froyo, Gingerbread) – el código de autenticación sigue funcionando bien – por lo que la bandera es realmente necesario?

Ok, para responder a esto yo mismo leyendo los documentos, la documentación para el atributo exported dice:

El valor predeterminado depende de si el servicio contiene filtros de intención. La ausencia de filtros significa que sólo se puede invocar especificando su nombre de clase exacto. Esto implica que el servicio está destinado sólo para el uso interno de la aplicación (ya que otros no saben el nombre de la clase). Así que en este caso, el valor predeterminado es "false". Por otro lado, la presencia de al menos un filtro implica que el servicio está destinado al uso externo, por lo que el valor por defecto es "true".

Todos los servicios de autenticación tienen un filtro de intenciones: los documentos para AbstractAccountAuthenticator dicen:

Para ser un autenticador debes … escribir un servicio que devuelve el resultado de getIBinder () en onBind del servicio (android.content.Intent) cuando se invoca con una intención con acción ACTION_AUTHENTICATOR_INTENT.

Esto requiere un filtro de intención, por lo que el valor predeterminado de exportado para el servicio es true . Así que la respuesta a esta pregunta es "No, el atributo no es necesario – porque es true por defecto" .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.