Android USB Host与HID 通讯(二)

我们接着上一部分的内容继续朝下看,上次我们只是简单地介绍了一下Android当中USB Host编程的一些基础知识,了解了几个常用的类,其实在Android系统中要想通过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端点进行写操作。在此可以不做请求权限处理,因为意图过滤器已经帮我们做了,若要进行动态请求权限的可以在此基础上再做扩展。

1)获取USB管理器,若获取失败,return。

mUsbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); if(mUsbManager == null) {

return;

}

2)枚举Host上所有的HID设备,存入一个列表,若列表不为空,枚举到设备,可以用getVendorId()和getProductId()方法获取到设备的VendorId和ProductId,可继续找设备的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();

}

到此为止,就可以发现你的HID外设,后面的我们下次再说,主要流程还是:枚举设备->找到设备的接口->连接设备->分配相应的端点->在IN端点进行读操作,在OUT端点进行写操作。