2012-09-18 63 views
0

我面臨着這樣的問題: 我有一個遠程(不同進程)綁定服務,它定義了一個帶有動作String的IntentFilter。 我的客戶端在其bindService(..)調用中使用相同的操作字符串綁定到它。Android遠程綁定服務接口

現在,當我實現另一個服務具有完全不同的AIDL接口,但在定義相同的IntentFilter,安裝此服務並刪除舊的:

  1. 我的客戶仍然能結合
  2. 我客戶甚至可以調用所需的方法(比如無效打印(有效載荷))客戶端不抱怨,也不是服務器端

我的問題:有沒有辦法在運行時檢查遠程服務正在執行的界面?

我發現的唯一可能的方法是檢查ServiceConnection中的ComponentName。 然而,這有一個暗示: 我將來無法交換服務的實施。

或者我錯過了什麼?

回答

0

據我瞭解你想要做的兩件事情之一:

a)連接到實現所需的接口服務(和你不關心服務是如何實現的)

在這種情況下, ,你使用意圖過濾器。在這種情況下,每個服務應該有不同的internt過濾器。一般來說,當你定義相同的意圖過濾器時,你說這兩個服務是兼容的(而且它們不是,因爲不同的AIDL)。

所以,你應該在這裏有不同的意圖過濾器。

b)連接到一個非常特殊的服務(它不能被任何其他服務替代)。

在這種情況下,當您執行bindService時,應該在傳遞給bindService的意圖中指定expilicit組件名稱。

+0

感謝您的回答。 我最初想要的是: 我將提供一些客戶端應用程序和服務的默認實現(例如PrintService)。 然後我想讓第三方提供他們自己的服務實現(相同的AIDL)。 通過使用 user1679581