如何将一个服务绑定到多个应用程序

时间:2013-04-10 20:19:18

标签: android service

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

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

所有者应用程序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包,扩展Service类的类是SampleService。执行bindService()函数后,LogCat显示“initService()绑定为true”。

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

应用程序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()绑定为false”

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

1 个答案:

答案 0 :(得分:0)

每次拨打bindService()都会调用服务的onBind()方法。该服务可以随意返回相同的IBinder - 实现对象到每个客户端。您可以使用checkCallingPermission()等方法对任何来电进行身份验证,如果您只是想知道来电者是谁,则可以使用getCallingUid()