去年9月份来到现在的公司,接到新公司的第一个项目就是Android USB Host与HID通讯,当时也什么都不懂,就拿着google的api 开发指南

http://developer.android.com/guide/topics/connectivity/usb/host.html)反复的阅读反复的实验,网上的资料也只能发现 / 枚举到U盘等设备,进行HID通讯、数据传输的资料很少,当时老大给我的时间是整整一个月,听到这我说:我尽量…

因为当时发了一两篇博文(Android USB Host 与 HID 通讯方法),最近有些Android开发攻城师在我的博客问,说具体要怎么做,如何处理?但最近手上有一大堆TabletSystem Bug,下班后再也不想继续,就一直没怎么回复,今天周六公司调班,想干点别的,就跟大家一起交流交流Android USB Host与HID 通讯。

首先,大家如果想了解啥是USB Host,那大家还是自己去学习学习吧,多看些一手的资料,别总是穿二手鞋(这是前辈对我的忠告)。跟我之前一样完全不知道Android USB Host的可以反复阅读下上面提到的google api 开发指南,我是反复的看了一遍又一遍,中文的英文的(英文有点戳),除了Host外,还有个Accessory,感兴趣的都可以了解下。。

其次,当时公司给我的HID设备既有需要驱动的也有无驱的,而公司给我的板子没有相应的驱动。只能发现无驱HID,若要发现有驱动的HID设备则需要另加上相应的设备驱动,否则你将无法发现你的HID设备。至于,怎么添加相应的驱动,这就需要请教写驱动的攻城师同胞,暂时还未向这方面发展,以后有机会可以横向发展下。

先看看AndroidManifest.xml文件,对于刚接触最好从简单入手,在AndroidManifest.xml中加上intent-filter过滤器,可以先不做请求权限的处理,因为intent-filter方式可以自动请求权限。

1)  添加USB HOST权限

<!-- USB HOST -->
<uses-featureandroid:name="android.hardware.usb.host"/>

2)添加意图过滤器,并配置自己的资源文件指定USB设备的属性,而资源文件为一个xml文件,如:device_filter.xml

<intent-filter>
    <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
</intent-filter>
<meta-data
    android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
    android:resource="@xml/device_filter"/>

3)对于资源文件device_filter.xml,需要配置设备的product-id 和vendor-id,如下:

<resource>
    <usb-deviceproduct-id="5635"vendor-id="5398"/>
</resource>

接下来就是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<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
if (!deviceList.isEmpty()) {
    for (UsbDevice device : deviceList.values()) {
       if(device.getVendorId() == VendorID && device.getProductId()==ProductID) {
           mUsbDevice = device;
           // 找到Device接口并分配相应端点
           findIntfAndEpt();
       } else {
           Toast.makeText(context, "NotFind 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端点进行写操作

Android USB Host与HID通讯 (一)的更多相关文章

  1. Android USB Host与HID通讯

    前端时间捣鼓一个HID的硬件, 需要和android通信, 网上搜索了一圈,收获不小. 比较好的文章是:      Android USB Host与HID通讯 Android Service创建US ...

  2. Android USB Host与HID通讯 (二)

    不好意思,从上一篇到现在确实比较忙,中间又外出了一段时间,虽然也上LOFTER,或者看到一些朋友QQ上加我,给我发信息询问,有些看到了有些可能没看到,偶尔回复了一两个,也不咋的详细,在此我想说,一方面 ...

  3. Android USB Host 与 HID 之通讯方法

    Android USB Host与HID通讯,就目前Google Developer提供的方法有bulkTransfer()与controlTransfer(),看是简简单单的两个方法,要实现真正的通 ...

  4. Android USB Host 与 HID 之通讯方法(bulkTransfer()与controlTransfer()方法使用)

    转载地址:差满多乃几 Android USB Host与HID通讯,就目前Google Developer提供的方法有bulkTransfer()与controlTransfer(),看是简简单单的两 ...

  5. Android USB Host 与 Hid 设备通信bulkTransfer()返回-1问题的原因

    近期一直在做Android USB Host 与USB Hid设备(STM32FXXX)的通信,遇到了很多问题.项目源码以及所遇到的其他问题可以见本博客其他相关文章,这里重点讲一下bulkTransf ...

  6. 翻译Android USB HOST API

    翻译Android USB HOST API 源代码地址:http://developer.android.com/guide/topics/connectivity/usb/host.html 译者 ...

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

    做android 与USB HID设备的通信有段时间了,总结一下遇到的问题和解决方法: 1,第一次遇到的问题:android 版本低不支持usb hid, 被要求做相关项目的时候,就从mUsbMana ...

  8. Android USB Host 通信程序

    换到了一家新公司,于是就有了新的项目.这次的项目 要用Android SDK与USB HID设备进行通信.第一次接触Android SDK,以及USB,记录下源程序.开发过程以及一些心得. 首先,要感 ...

  9. android usb host 读写USB设备

    自android3.1以后android增加了操作USB设备的API. 官网地址:http://developer.android.com/guide/topics/connectivity/usb/ ...

随机推荐

  1. 用jquery-easyui中的combotree实现树形结构的选择

    用jquery-easyui中的combotree实现树形结构的选择 需求:实现一个树形节点的选择,要求默认父节点都折叠,父节点前的checkbox不显示,子节点显示checkbox,且父节点不可选择 ...

  2. POJ 1099 Square Ice

    Square Ice Description Square Ice is a two-dimensional arrangement of water molecules H2O, with oxyg ...

  3. C语言的奇技

    1.一个整型变量/字面值常量通常足够大,可以同时表示几个字符,所以有的C编译器允许字符常量/char及整型常量有多个字符.这表明当用' yes' 替代" yes" 时可能不会被发现 ...

  4. 查找并绘制轮廓[OpenCV 笔记XX]

    好久没有更新了,原谅自己放了个假最近又在赶进度,所以...更新的内容是很靠后的第八章,因为最近工作要用就先跳了,后面会更新笔记编号...加油加油! 在二值图像中寻找轮廓 void cv::findCo ...

  5. 几个app maker的网站

    简网APP工场:http://www.cutt.com/app 爱传iappk:http://www.iappk.com 安米网:http://www.appbyme.com/mobcentACA/i ...

  6. WCF SOA服务应用

    WCF是微软官方推出的一个基于服务的整合框架,它整合了以前的Web Service.MSMQ.Remoting等通信技术,通过灵活的配置,让服务编程更加容易.可扩展.这篇文章主要目的就是带领大家从开发 ...

  7. win7定时任务

    最近某app有个小抽奖,每天点击太麻烦,想做个定时任务访问抽奖链接(带着cookie登录信息,即可抽奖成功) 刚开始做了php,最后发现部署在百度bae中没法做定时任务每天执行,后来换成了python ...

  8. python27读书笔记0.1

    --Notes: 测试环境:Windows ,python 2.7.3,python 自带的IDLE #-*- coding: utf-8 -*- # First Lesson# --- Line s ...

  9. 对WPF中MeasureOverride 和ArrangeOverride 浅理解

    以前对MeasureOverride 和ArrangeOverride十分费解,看到了这篇博文茅塞顿开~ public class CustomControl1 : Panel { /// <s ...

  10. 关于ASE日志空间示数不正常的解决办法

        最近某系统的ASE数据库出现了异常,经过各种努力,终于把数据库正常又起起来了.但是经过检查,发现在查看剩余日志空间的时候(sp_helpsegment 'logsegment'),发现显示出来 ...