2

我有一个包含服务的主应用程序和想要使用该服务的第二个应用程序。

主应用程序在清单中有这个(不是在活动中):

<service
    android:name="com.example.foo.XMPPService"
    android:exported="true"
    android:process="xmppService" />

在第二个应用程序中,我尝试绑定到它:

Intent intent = new Intent();
intent.setClassName("com.example.foo", "com.example.foo.XMPPService");
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

但我得到了错误:

Unable to start activity ComponentInfo{com.example.app2/com.example.app2.MainActivity}: java.lang.SecurityException: Not allowed to bind to service Intent { cmp=com.example.foo/.XMPPService }

所以我想知道为什么不允许这样做,而我将“导出”设置为 true。

4

1 回答 1

3

android:process从文档中的小写字母开始:

If the process name begins with a lowercase character, the service will run in a global process of that name, provided that it has permission to do so. This allows components in different applications to share a process, reducing resource usage.

如果您不理会此标签,该服务将成为您的应用程序的一部分。一旦你开始弄乱它,它就会为自己创建一个过程。此全局进程将以系统用户身份运行,并且需要使用平台证书进行签名。

于 2013-07-31T16:30:47.707 回答