0

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

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

  1. 我的客户仍然能够绑定
  2. 我的客户端甚至能够调用所需的方法(比如 void print(Payload))客户端不会抱怨,服务器端也不会抱怨

我的问题:有没有办法在运行时检查远程服务正在实现的接口?

我发现的唯一可能的方法是检查ComponentName. ServiceConnection然而,这有一个含义:将来我将无法交换服务的实现。

还是我错过了什么?

4

1 回答 1

0

据我了解,您想做以下两件事之一:

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

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

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

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

在这种情况下,当您执行 bindService 时,您应该在意图中指定显式组件名称,并将其传递给 bindService。

于 2012-09-19T03:31:16.317 回答