尝试与另一个应用程序进行 IPC 时,客户端应用程序中的 bindService() 失败

bindService() in client app fails when trying to do IPC with another app

我想获得一些使用 AIDL 的 android IPC 的经验。我想看看是否可以在两个不同的 android 应用程序之间进行通信。

我的问题是,在第二个应用程序中调用 bindService 与第一个应用程序的 FactorialService 通信时,服务总是失败。我的第一个应用 activity MainActivity 尝试调用 bindService 时总是记录 bindService returns false 的事实。另外,第二个应用程序(客户端应用程序)的 MainActivity(实现 ServiceConnection)永远不会调用其回调方法 onServiceConnected

因此,在 第一个应用程序 中运行名为 FactorialService

的服务

FactorialRequest 包含一个输入数字(比如 n)。 fact returns n! 以及其他信息。



但似乎bindService失败了。事实上,每次我暂停应用程序并 return 到它,或启动它。显示"Failed to bind our service!!!"。

请注意,这两个应用共享一个 Android 库模块,其中包含所需 aidl 文件的定义。

你看到任何能让 bindService() 工作的东西吗?

为什么要使用 super.bindservice()?相反,你能试试这个 getApplicationContext().bindservice()

此外,如果这也不起作用,请尝试对您的代码进行以下修改:

   Intent i = new Intent("com.example.simonlbc.factorialservice.FactorialService");
   if(getApplicationContext().startService(i) != null){
       if (!getApplicationContext().bindService(i, serviceConnection, 0))
           Log.w(TAG, "Failed to bind our service!!!");
   }

其中 seriveConnection 是服务连接的对象(我不喜欢将 this 用于 ServiceConnection )。此外,您的服务应该设置正确的 Action,否则它不会启动