3

我们对使用服务进行 Android 编程非常陌生。我们设法通过一个应用程序运行服务。现在,我们有一个所有者应用程序“AppA”启动了该服务,还有另一个应用程序“AppB”想要使用该服务。那么我们如何将这个应用程序“AppB”绑定到同一个正在运行的服务呢?是否应该创建多个服务实例(这可能吗?)还是我们可以将多个应用程序绑定到同一个服务实例?

我们创建了一个名为 initservice() 的函数,以便将活动绑定到服务。

所有者 App A 在 initService() 中的代码:

connection = new SampleServiceConnection();
Intent i = new Intent();
i.setClassName("com.example.basicstuff",com.example.basicstuff.SampleService.class.getName());
this.startService(i);
boolean ret = bindService(i, connection, Context.BIND_AUTO_CREATE);
Log.d(TAG, "initService() bound with " + ret);

SampleServiceConnection 类是实现Andorid 的ServiceConnection 类的类。我已经实现了 onServiceConnected() 和 onServiceDisconnected() 函数。我的第一个所有者应用程序“AppA”是包 com.example.basicstuff,扩展服务类的类是 SampleService。执行 bindService() 函数后,LogCat 显示“initService() bound with true”。

我还创建了一个名为 ISampleService 的 .aidl 文件。

App B 在 initService() 中的代码

connection = new SampleServiceConnection();
Intent i = new Intent("com.example.GameBook_Chat.ISampleService");
System.out.println(this.startService(i));
System.out.println("service running");
boolean ret = bindService(i, connection, Context.BIND_AUTO_CREATE);
Log.d(TAG, "initService() bound with " + ret);

我的第二个包名称是 com.example.GameBook_Chat,它希望与上面代码中运行的相同服务进行通信。在执行 bindService() 函数时,LogCat 服务会显示“initService() bound with false”

所以基本上我无法让第二个应用程序与服务通信。有人可以告诉我可以进行哪些更正吗?

4

1 回答 1

0

每次调用都会bindService()导致调用服务的onBind()方法。服务可以随意向每个客户端返回相同的IBinder实现对象。您可以使用诸如checkCallingPermission()对任何呼叫进行身份验证之类的方法,或者getCallingUid()如果您只想知道呼叫者是谁。

于 2013-04-10T20:27:56.687 回答