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

时间:2012-05-06 20:44:01

标签: android android-service

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

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

其中IService是AIDL接口。

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

这个警告是什么意思?

3 个答案:

答案 0 :(得分:117)

当我将SDK 更新为版本 20 时,我遇到了同样的问题。我删除了它添加 android:exported 属性android:exported="false",如下所示:

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

请参阅此doc

答案 1 :(得分:50)

如果要将活动使用限制在自己的应用程序中,则应将exported=false添加到活动的清单声明中。

如果您想允许其他应用程序使用它(显式地通过其类名,或者更好,通过使用具有数据类型或操作的意图),那么您有两种选择:

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

-

同样的理由适用于tools:ignore="ExportedService"和内容提供商tools:ignore="ExportedContentProvider"的服务。

答案 2 :(得分:4)

正如Jens所说,&#34;这意味着用户在手机上使用的其他(任意)应用程序可以绑定到您的服务并调用他们通过您的AIDL界面公开的任何方法。&# 34;