android usb Host模式下与usb Hid 设备的通信

本文总结了在Android USB Host模式下与USB HID设备通信时遇到的问题及解决方案,包括Android版本不支持USB HID、缺少权限配置、获取设备权限的方法以及使用中断传输进行数据交互的细节。通过实例代码展示了如何建立连接、请求权限和接收数据。
摘要由CSDN通过智能技术生成

做android 与USB HID设备的通信有段时间了,总结一下遇到的问题和解决方法:

1,第一次遇到的问题:android 版本低不支持usb hid,

被要求做相关项目的时候,就从mUsbManager.getDeviceList开始,郁闷了一周,就是返回NULL,从google上查找所有关于android usb的资料,最后才发现,android设备是2.3的不支持android.usb.hardware的包(android3.0之后才支持);

2,第二次:android的etc/permissions没有android.hardware.usb.host.xml权限。

发现版本低之后赶快去买了一个android4.0的设备来测试,发现还是返回NULL。还得从google寻找答案,这篇对我的帮助很大:http://stackoverflow.com/questions/11183792/android-usb-host-and-hidden-devices。最后把设备root了一下在系统文件etc/permissions里面加入权限后OK, mUsbManager.getDeviceList() !=null了。

3,获取需要连接的USB 设备权限

可以参考http://developer.android.com/guide/topics/connectivity/usb/host.html;

获取连接权限有两种方式,

在调试过程中就遇到方法一无法连接的问题,还是使用mUsbManager.requestPermission()解决

4,usb hid只能是中断传输,或者控制传输

这个问题纠结很久,因为根据android开发的api Guider使用connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT);无论如何得不到数据。后来在stackoverflow上去翻所有关于android usb hid的文章结果发现说是需要中断传输。

UsbRequest request = new UsbRequest();
        Boolean isOpenRequest = request.initialize(connection,
mUsbEndpoint);

       if(isOpenRequest){

         request.queue(buffer, buffer.length);

         if(communication.waitRequest==request){

                //do something like as receiver date

               // 如何这时收到某个数据时需要向设备发送命令则需要使用

              controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)

          }

       }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值