导出的服务不需要权限:这是什么意思?

我创build了一个由其他应用程序通过AIDL绑定的服务,并将其添加到清单中,如下所示:

<service android:name=".MyService"> <intent-filter> <action android:name="org.example.android.myservicedemo.IService" /> </intent-filter> </service> 

IService是AIDL接口。

通过这种方式,Eclipse向我显示警告“ 导出服务”不需要权限 。 如果我删除intent-filter ,警告消失,但显然应用程序无法绑定到服务。

这个警告是什么意思?

当我将SDK更新到版本20时,我遇到了同样的问题。 我删除它添加android:导出属性android:exported="false"像这样:

 <service android:name=".MyService" android:exported="false"> <intent-filter> <action android:name="org.example.android.myservicedemo.IService" /> </intent-filter> </service> 

请参阅此文档

如果您想限制您的活动使用情况到您自己的应用程序,那么您应该将exported=false添加到您的活动的清单语句中。

如果你想允许其他应用程序使用它(显式地通过它的类名,或者更好地使用一个数据types或动作的意图),那么你有两个select:

  • 通过使用权限限制这些应用程序
  • 允许所有应用程序使用它,然后您可以添加tools:ignore="ExportedActivity"到您的活动的清单语句。

同样的理由适用于一个服务,使用tools:ignore="ExportedService"和内容提供者的tools:ignore="ExportedContentProvider"

正如Jens所说:“这意味着用户在手机上的其他(任意)应用程序可以绑定到您的服务,并调用通过您的AIDL接口暴露的任何方法。”