我們接著上一部分的內(nèi)容繼續(xù)朝下看,上次我們只是簡單地介紹了一下Android當中USB Host編程的一些基礎知識,了解了幾個常用的類,其實在Android系統(tǒng)中要想通過USB Host與HID通訊,所做的工作的還有很多。
先看看AndroidManifest.xml文件,對于剛接觸好從簡單入手,在AndroidManifest.xml中加上intent-filter過濾器,可以先不做請求權限的處理,因為intent-filter方式可以自動請求權限。
1) 添加USB HOST權限
2)添加意圖過濾器,并配置自己的資源文件指定USB設備的屬性,而資源文件為一個xml文件,如:device_filter.xml
3)對于資源文件device_filter.xml,需要配置設備的product-id 和vendor-id
剩下的就是java代碼,大概步驟包括:枚舉設備->找到設備的接口->連接設備->分配相應的端點->在IN端點進行讀操作,在OUT端點進行寫操作。在此可以不做請求權限處理,因為意圖過濾器已經(jīng)幫我們做了,若要進行動態(tài)請求權限的可以在此基礎上再做擴展。
1)獲取USB管理器,若獲取失敗,return。
mUsbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); if(mUsbManager == null) {
return;
}
2)枚舉Host上所有的HID設備,存入一個列表,若列表不為空,枚舉到設備,可以用getVendorId()和getProductId()方法獲取到設備的VendorId和ProductId,可繼續(xù)找設備的UsbInterface;若列表為空,未枚舉到設備。
HashMap deviceList = mUsbManager.getDeviceList();
if (!deviceList.isEmpty()) {
for (UsbDevice device : deviceList.values()) {
if(device.getVendorId() == VendorID && device.getProductId()==ProductID) {
mUsbDevice = device;
// 找到Device接口并分配相應端點
findIntfAndEpt();
} else {
oast.makeText(context, "Not find VID and PID",Toast.LENGTH_SHORT).show();
}
}
} else {
new AlertDialog.Builder(context).setTitle("未枚舉到設備!")
.setMessage("請先連接設備,再重啟程序。。")
.setCancelable(false)
.setNeutralButton("確定", new DialogInterface.OnClickListener() {
public voidonClick(DialogInterface dialog, int which) {
//finish();
}
}).show();
}
到此為止,就可以發(fā)現(xiàn)你的HID外設,后面的我們下次再說,主要流程還是:枚舉設備->找到設備的接口->連接設備->分配相應的端點->在IN端點進行讀操作,在OUT端點進行寫操作。