0

私はこの種の問題に直面しています:IntentFilterアクション文字列を定義するリモート (別のプロセス) バインド サービスがあります。bindService(..)私のクライアントは、その呼び出しで同じアクション文字列を使用してそれにバインドします。

ここで、完全に異なるAIDLインターフェースを持つが同じ IntentFilter が定義された別のサービスを実装する場合、このサービスをインストールして古いサービスを削除します。

  1. 私のクライアントはまだバインドできます
  2. 私のクライアントは目的のメソッドを呼び出すことさえできます(void print(Payload)など)クライアント側もサーバー側も文句を言いません

私の質問: リモート サービスが実装しているインターフェイスを実行時に確認する方法はありますか?

私が見つけた唯一の可能な方法は、 で をチェックするComponentNameことServiceConnectionです。ただし、これには 1 つの意味があります。将来、サービスの実装を交換することはできません。

または、何か不足していますか?

4

1 に答える 1

0

私が理解しているように、あなたは2つのことのいずれかをしたいと思っています:

a)必要なインターフェースを実装するサービスに接続します(そして、サービスがどのように実装されているかは気にしません)

この場合、インテント フィルターを使用します。このような場合、各サービスには異なるインターント フィルターが必要です。一般的に言えば、同じインテント フィルタを定義している場合、これら 2 つのサービスには互換性があると言えます (AIDL が異なるため、互換性はありません)。

したがって、ここにはさまざまなインテント フィルタが必要です。

b) 非常に特定のサービスに接続します (他のサービスで代用することはできません)。

そのような場合は、bindService を実行するときに、明示的なコンポーネント名をインテントで指定して、bindService に渡す必要があります。

于 2012-09-19T03:31:16.317 に答える