Android远程绑定服务界面

时间:2012-09-18 07:57:18

标签: android service interface aidl

我正面临着这样的问题: 我有一个远程(不同进程)绑定服务,它定义了一个带有动作字符串的IntentFilter。 我的客户端使用bindService(..)调用中的相同操作字符串绑定到它。

现在,当我使用完全不同的 AIDL 接口实现另一项服务但定义了相同的IntentFilter时,请安装此服务并删除旧服务:

  1. 我的客户仍然能够绑定
  2. 我的客户端甚至可以调用所需的方法(比如void print(Payload))客户端没有抱怨,也没有服务器 侧
  3. 我的问题:有没有办法在运行时检查远程服务正在实现的接口?

    我找到的唯一可行方法是检查ComponentName中的ServiceConnection。 这有一个含义: 我将来无法交换服务的实施。

    或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

据我所知,你想做两件事之一:

a)连接到实现所需接口的服务(并且您不关心如何实现服务)

在这种情况下,您使用意图过滤器。在这种情况下,每个服务应该有不同的internt过滤器。一般来说,当您定义相同的意图过滤器时,您说这两个服务是兼容的(并且它们不是,因为AIDL不同)。

所以,你应该在这里有不同的意图过滤器。

b)连接到一个非常特殊的服务(它不能被任何其他服务替代)。

在这种情况下,当你执行bindService时,你应该在intent中指定expilicit组件名称,并将其传递给bindService。