我们对使用服务的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”
所以基本上我无法让第二个应用与服务进行通信。有人能告诉我可以做些什么更正吗?
答案 0 :(得分:0)
每次拨打bindService()
都会调用服务的onBind()
方法。该服务可以随意返回相同的IBinder
- 实现对象到每个客户端。您可以使用checkCallingPermission()
等方法对任何来电进行身份验证,如果您只是想知道来电者是谁,则可以使用getCallingUid()
。