2013-03-26 89 views
1

我工作的公司製作了一個定製的運行Android的硬件。它將連接到相當多的外圍組件。關鍵的一點是,該設備是爲另一家公司。Android - 是否有可能擁有硬件交互方法的內容提供者?

我知道一個ContentProvider,數據可以在應用程序之間共享。然而,我想知道的是,與硬件交互的方法(GPIO交互)是否可以以任何應用程序可以使用的方式進行存儲。

例如,假設器件具有映射到LED的某個GPIO引腳。您可以創建一種使LED閃爍的方法,在應用程序中使用它,然後將設備交給其他人,並希望隱藏代碼,但再次使用LED閃爍方法。這不是必需的,但可以允許另一個公司構建另一個應用程序來補充我們提供的設備。

任何見解都會有所幫助。

乾杯

回答

2

您可以使用ContentProvider想休息webinterface

從應用:

Uri ledUri = Uri.parse("content://your.app/led"); 
ContentResolver cr = getContentResolver(); 

// "write" data 
ContentValues cv = new ContentValues(); 
cv.put("state", 1); 
cr.insert(ledUri, cv); 

// read data 
int newState = 0; 
Cursor c = cr.query(ledUri, new String[] { "state" }, null, null, null); 
if (c.moveToFirst()) { 
    newState = c.getInt(0); 
} 

您的供應商裏面,而不是將數據寫入到您只需設置/數據庫中讀取GPIO狀態。大致如

@Override 
public Uri insert(Uri uri, ContentValues values) { 
    if (uri.toString().equals("content://your.app/led")) { 
     int requestedState = values.getAsInteger("state"); 
     set_gpio_state(requestedState); 
    } 
} 

如何從Java獲取GPIO是另一個問題,因爲它們只能在內核級別訪問(AFAIK)。

+0

乾杯,聽起來很有希望。好點,我在一個單獨的問題中提出這個問題。 – mgibson 2013-03-26 17:20:10

+0

@mgibson似乎你可以通過sysfs導出來訪問GPIO,例如https://groups.google.com/forum/?fromgroups=#!topic/android-porting/PJderXD-G_4或http://stackoverflow.com/questions/8723911/linux-userspace-gpio-interrupts-using-sysfs 。需要訪問設備固件源。您還可以添加特殊權限(Android硬件權限映射到Linux組成員身份),因此只有您的contentprovider應用可以讀取/寫入這些值。 – zapl 2013-03-26 17:41:30

+0

再次,這是一些很好的信息,謝謝!您認爲使用ContentProvider作爲共享各種不需要查看源代碼的開發人員之間硬件方法的方法是可行的嗎?或者,一旦GPIO功能暴露給sysfs,編譯後的.jar文件就更合適了?基本上尋找類似於Android硬件庫的東西,例如相機等 – mgibson 2013-03-27 10:25:20

相關問題