Android USB Host与HID通讯 (一)
去年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通讯 (一)的更多相关文章
- Android USB Host与HID通讯
前端时间捣鼓一个HID的硬件, 需要和android通信, 网上搜索了一圈,收获不小. 比较好的文章是: Android USB Host与HID通讯 Android Service创建US ...
- Android USB Host与HID通讯 (二)
不好意思,从上一篇到现在确实比较忙,中间又外出了一段时间,虽然也上LOFTER,或者看到一些朋友QQ上加我,给我发信息询问,有些看到了有些可能没看到,偶尔回复了一两个,也不咋的详细,在此我想说,一方面 ...
- Android USB Host 与 HID 之通讯方法
Android USB Host与HID通讯,就目前Google Developer提供的方法有bulkTransfer()与controlTransfer(),看是简简单单的两个方法,要实现真正的通 ...
- Android USB Host 与 HID 之通讯方法(bulkTransfer()与controlTransfer()方法使用)
转载地址:差满多乃几 Android USB Host与HID通讯,就目前Google Developer提供的方法有bulkTransfer()与controlTransfer(),看是简简单单的两 ...
- Android USB Host 与 Hid 设备通信bulkTransfer()返回-1问题的原因
近期一直在做Android USB Host 与USB Hid设备(STM32FXXX)的通信,遇到了很多问题.项目源码以及所遇到的其他问题可以见本博客其他相关文章,这里重点讲一下bulkTransf ...
- 翻译Android USB HOST API
翻译Android USB HOST API 源代码地址:http://developer.android.com/guide/topics/connectivity/usb/host.html 译者 ...
- android usb Host模式下与usb Hid 设备的通信
做android 与USB HID设备的通信有段时间了,总结一下遇到的问题和解决方法: 1,第一次遇到的问题:android 版本低不支持usb hid, 被要求做相关项目的时候,就从mUsbMana ...
- Android USB Host 通信程序
换到了一家新公司,于是就有了新的项目.这次的项目 要用Android SDK与USB HID设备进行通信.第一次接触Android SDK,以及USB,记录下源程序.开发过程以及一些心得. 首先,要感 ...
- android usb host 读写USB设备
自android3.1以后android增加了操作USB设备的API. 官网地址:http://developer.android.com/guide/topics/connectivity/usb/ ...
随机推荐
- C#学习笔记3:提示“截断字符串或二进制数据”错误解决方法
1.调试程序如出现“截断字符串或二进制数据”的关于数据库的错误,可以先试一试修改数据库中字符定义的长度. 2.使用ManualResetEvent前需导入 命名空间System.Threading; ...
- Flume负载均衡配置
flume负载均衡配置 集群DNS配置如下: hadoop-maser 192.168.177.162 machine-0192.168.177.158 machine-1191.168.177.16 ...
- 如何入侵Linux操作系统
我发现了一个网站,于是常规入侵.很好,它的FINGER开着,于是我编了一个SHELL,aaa帐号试到zzz(by the way,这是我发现的一个网上规律,那就是帐号的长度与口令的强度成正比, 如果一 ...
- 崩溃信息:Message from debugger: Terminated due to signal 9
是因为你在调试的时候主动了结束了程度,如上滑结束了程序
- 通过正则获取url参数
1.通过正则来获取url地址栏的参数: ---------------------------我是分割线-------------------------------- var reg1=/([^?& ...
- windows phone 生产二维码和解码本地二维码图片
前面模仿着写了一个手机扫描二维码和条形码的例子,zxing(下载)的Silverlight库实现的,当时还纳闷有windows phone的库为什么不用,其实都是一样的,,,要改的就是获取摄像头获取的 ...
- Linux网络应用编程之VLAN(Packet Tracer仿真)
VLAN 一.VLAN概述 VLAN(虚拟局域网):将多个设备和用户在逻辑上联网在一起,这些设备和用户不受物理位置的限制(物理设备可以在不同的地方),但是他们的通信就好像在同一网段中一样,这就叫VLA ...
- JDBC-ODBC桥接访问SQLServer2008数据库
来源:十二随风博客 将对JDBC API的调用,转换为对另一组数据库连接API的调用优点:可以访问所有ODBC可以访问的数据库缺点:执行效率低.功能不够强大 (1)建立数据源,注意系统DNS才行,用户 ...
- mouseover与mouseenter与mousemove的区别mouseout与mouseleave的区别
<html> <head> <title></title> </head> <body> <p> 当鼠标进入div1 ...
- 【原】yield的最基本用法
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Itca ...