studio permisos exported example editar definicion androidmanifest activity android authentication android-manifest

permisos - androidmanifest.xml editar



¿Es Android: exportado=“verdadero” realmente necesario para un servicio de autenticación? (2)

Ok, para responder esto yo mismo leyendo los documentos, la documentation del atributo exported dice:

El valor predeterminado depende de si el servicio contiene filtros de intención. La ausencia de filtros significa que solo se puede invocar especificando su nombre de clase exacto. Esto implica que el servicio está destinado solo para uso interno de la aplicación (ya que otros no sabrían el nombre de la clase). Entonces, en este caso, el valor predeterminado es "falso". Por otro lado, la presencia de al menos un filtro implica que el servicio está diseñado para uso externo, por lo que el valor predeterminado es "verdadero".

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

Para ser un autenticador se debe ... escribir un servicio que devuelva el resultado de getIBinder () en el servicio onBind (android.content.Intent) del servicio cuando se invoca con un intento con la acción ACTION_AUTHENTICATOR_INTENT.

Esto requiere un filtro de intento, por lo tanto, el valor predeterminado de exportación para el servicio es true . Entonces, la respuesta a esta pregunta es "No, el atributo no es necesario, porque es verdad por defecto" .

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, ambos servicios tienen el 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>

El hecho de eliminar el atributo del servicio de autenticación parece no tener ningún efecto (Froyo probado, pan de jengibre): el código de autenticación sigue funcionando bien, ¿por lo que es realmente necesario el indicador?