android:exported =“true”对于authentication服务确实是必需的吗?

通常有两个服务涉及到实现一个Android身份validation器 – 身份validation服务返回一个身份validation,以及提供同步适配器的同步服务。 这个问题特别是关于authentication服务,虽然在大多数例子中, 这两个服务在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> 

从authentication服务中删除属性似乎没有效果(testingFroyo,姜饼) – authentication代码继续工作就好 – 标志实际上是必要的?

Solutions Collecting From Web of "android:exported =“true”对于authentication服务确实是必需的吗?"

好的,通过阅读文档自己回答这个问题, exported属性的文档说:

默认值取决于服务是否包含意图filter。 没有任何filter意味着它只能通过指定其确切的类名来调用。 这意味着该服务仅用于应用程序内部使用(因为其他人不知道类名)。 所以在这种情况下,默认值是“false”。 另一方面,至less存在一个filter意味着该服务是为了外部使用,所以默认值是“true”。

所有authentication服务都有一个意图filter – AbstractAccountAuthenticator的文档说:

为了成为一个authentication者,必须…编写一个服务,在用ACTION_AUTHENTICATOR_INTENT动作调用intent时,返回服务的onBind(android.content.Intent)中getIBinder()的结果。

这需要一个意图filter,因此为服务导出的默认值为true 。 所以这个问题的答案是“不,这个属性是不必要的 – 因为默认情况下是真的”