2013-01-14 37 views
1

我在系統應用程序中有一個服務。我希望沒有系統權限的客戶端應用程序能夠調用服務中的功能來執行需要系統權限的事情。由於該服務位於其自己的應用程序中,因此我使用AIDL爲服務和客戶端應用程序之間的IPC定義接口。Android服務AIDL數據類型

我希望讓客戶端應用程序的人員能夠編寫自己的需要系統權限的代碼,併爲我提供包含在我的服務中的代碼。因此,我的服務將收到一個通用請求,指明將請求傳遞到的位置以及請求本身。

因爲我不知道客戶端需要將哪些數據傳入/傳出到自己的代碼中,所以我想使用通用接口來處理它們可能需要的任何類型的數據。我需要的功能添加到AIDL接口爲每個數據類型:

void doStuff(in String inStr, out String outStr); 
void doStuff(in int inInt, out int outInt); 

等等

它會更好,使我自己parcelable對象?用AIDL處理這個問題的最佳方法是什麼?

回答

2

你的問題有兩個部分:

一)服務(表示從哪裏傳請求):

你可以調用程序UID,然後再使用它作爲工作/請求指示。

b)中AIDL類型:

默認情況下,AIDL支持以下數據類型:

1)所有的原始類型在Java編程語言(如int,長,焦炭,布爾值,和等等) 2)字符串 3)的CharSequence 4)名單

如果您有任何其他的對象,那麼你需要創建自己的parcelable對象。

+0

感謝您的輸入,但它並沒有真正回答我如何處理數據類型和參數數量未知的接口的問題。 –

+0

您可以使用Bundle作爲變量類型。 –

+0

捆綁應該工作,謝謝。 –