2014-07-15 82 views
0

documentaion在開發者論壇上,這是怎麼了,我可以用AIDL綁定我的服務:綁定使用AIDL與綁定使用操作的服務?

/* Establish a couple connections with the service, binding by interface names.This allows other applications to be installed that replace the remote service by implementingthe same interface.*/ 

bindService(new Intent(IRemoteService.class.getName()),mConnection, Context.BIND_AUTO_CREATE); 

現在我有一個應用程序,它具有服務類和AIDL接口。

和我有過,我希望訪問服務類應用A的,在使用應用程序A暴露紐約AIDL

所以我創建完全相同pacakge應用B的內部AIDLs方法和具有粘貼AIDLs應用B從應用程序A.

但是,當我嘗試使用上面提到的文檔的機制來綁定服務它告訴我:

無法啓動服務意向{行動com.example.service.MyService } U = 0:未找到

在應用程序A服務

導出= 「真」。

這種方法我在應用中添加一個意圖過濾器,以我的服務,並試圖指定明確的意圖使用

intent.setClassName(String packageName, String className) 

而且現在它的工作現在insted的!

那麼有什麼我錯過了,而提到原始文件?當接近將被使用?

+0

IRemoteService.class.getName()返回什麼?你是如何在清單中定義你的服務的? – pskink

+1

請參閱我的問題開始時引用Android文檔的鏈接。 http://developer.android.com/guide/components/aidl.html#Calling –

+0

你沒有回答,你是如何在清單中聲明你的服務的? – pskink

回答

0

在上面的評論中與pskink討論後,我得到了這個問題的答案。這個問題在於我的新實現。

檢查文檔中以上示例中使用的Intent的構造函數。它告訴IRemoteService.class.getName()傳入裏面的Intent構造函數不過是一個'Action'。因此,如果我希望我的代碼應該能夠找到我希望綁定的服務,那麼應該在我的服務的intent過濾器中提及由返回的字符串IRemoteService.class.getName()

兩點這裏主要考慮是:

  1. 這不會遵循的行爲標準命名約定。

  2. 使用隱式意圖啓動服務使waring作爲隱含的意圖與startService是不安全的,因爲明顯的原因,如果多個服務使用相同的操作,那麼這將是一個問題。