gpt4 book ai didi

android - 如何将一项服务绑定(bind)到多个应用程序

转载 作者:太空狗 更新时间:2023-10-29 15:11:46 28 4
gpt4 key购买 nike

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

为了将 Activity 绑定(bind)到服务,我们创建了一个名为 initservice() 的函数。

Owner 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”

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

最佳答案

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

关于android - 如何将一项服务绑定(bind)到多个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15935631/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com