android_USB_Host
Android中查看USB连接的外接设备信息的代码实例

Android中查看USB连接的外接设备信息的代码实例1,USB存储设备(如:U盘,移动硬盘)://USB存储设备插拔监听与 SD卡插拔监听⼀致。
复制代码代码如下:private USBBroadCastReceiver mBroadcastReceiver;IntentFilter iFilter = new IntentFilter();iFilter.addAction(Intent.ACTION_MEDIA_EJECT);iFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);iFilter.addAction(Intent.ACTION_MEDIA_REMOVED);iFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);iFilter.addDataScheme("file");mBroadcastReceiver = new USBBroadCastReceiver();registerReceiver(mBroadcastReceiver, iFilter);private class USBBroadCastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(Intent.ACTION_MEDIA_EJECT)) {//USB设备移除,更新UI} else if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {//USB设备挂载,更新UI}}}//获得挂载的USB设备的存储空间使⽤情况public static String getUSBStorage(Context context){// USB Storage//storage/udisk为USB设备在Android设备上的挂载路径.不同⼚商的Android设备路径不同。
CH341PAR_Android 库接口说明

CH341PAR Android JAR库接口说明版本: V1.00CH341PAR Android JAR库接口说明版本: 1简介CH341是一个USB总线的转接芯片,通过USB总线提供异步UART、并口、常用的2线和4线同步串行接口等方式。
并口方式下,提供了EPP/MEM 8位并行接口,而常用的同步串行接口主要包含2线IIC、4线SPI等。
本文档主要介绍CH341USB转EPP、MEM、IIC、SPI模式(以下简称CH341PAR)操作的Java Driver 库,以及Android下如何使用APK操作CH341PAR实现数据通讯。
该驱动基于Android USB Host协议完成,用户可调用所提供的相关接口API实现与Android USB Host的通讯。
CH341PAR提供的库需要满足以下两个条件方可实现数据通讯:1、Android 3.1及以上系统版本;2、Android端具有USB Host或OTG接口。
本文档将会重点说明Android USB Host与CH341建立通讯机制的Java包API以及我司提供的演示程序的操作说明。
关于Android USB Host协议说明,可以参考Google官方文档。
1、Android USB Host本文档所描述的演示程序皆是针对Android 3.1及以上版本系统。
Android 应用程序的启动参数是定义在device_filter.xml文件中的product-id和vendor-id。
基于CH341PAR开发的Android应用程序主要分为两个部分,如下图:图1.1 CH341PAR Android ApplicationUser Layout:主要是由用户根据自己的需求完成相关的代码,通过调用CH341PAR相关的接口函数实现EPP、MEM、IIC、SPI的通讯方式。
我司所提供的例程基于Fragment结构设计,在Android手机或平板上会呈现出不同的主界面。
googleADK开发环境的搭建(USB_HOST_SHIELD)

Google ADK开发环境的搭建(USB HOST SHIELD + ARDUINO MEGA2560)By:MobotRoid 一、背景Google在今年5,6月份的时候更新Android到2.3.4开始支持外接扩展硬件,这里无疑为我们描绘了未来嵌入式智能的发展蓝图,在任何你需要智能计算的地方,可以是汽车里,可以是家庭智能计算中心,甚至可以在天文台都可以即时插入手机获取手机的计算资源.当然就目前来看最大的应用还是在机器人智能上.很久以前就一直萌生有自己做机器人的想法,苦于对数电模电单片机了解太粗浅,一直没能下手,这次ADK的开放可以说对于做软件的人来说是敞开了机器人的大门.因为ADK发布并不久,算是比较新的技术,网上的资源相对较少,特别是国内的资源更少,这里就我这段时间对ADK环境搭建的经验分享出来给大家.Google本身发布了一个专用于ADK的板子,要价400美刀,当然实际上用arduino + usb host shield(在淘宝上2560 + USB HOST SHIELD 2.0 只需要300人民币左右)也是可以达到的,虽然实际做起来有点曲折.二、相关文件的生成先附上google标准教程:(你严格按照这个做如果能完成最好,如果不能完成还是看我这个吧) /guide/topics/usb/adk.html你需要在这步产生两个文件,一个手机端用的apk以及一个用于上传到板子上的pde.严格按照谷歌官方的步骤走,第一步,下载googleADK包(https:///android/adk/adk_release_0512.zip)第二步,搭建android开发环境(网上一搜一把,我这里就不重复了), 通过SDK Manager下载Adds-on(Google APIs),如果手机就 2.3.3,level10,如果是pad就需要 3.0(安装图可以见/android/add-ons/google-apis/installing.html)第三步,在eclipse中,通过建立已存在工程的方式把ADK包中的\app工程建立出来,target选google API,或者2.3.3或者3.0,根据需要建立,建立完了以后,在工程下就会有bin文件夹产生了,下面那个apk就是我们要用的apk了第四步,下载arduino开发IDE(/en/Guide/HomePage),完了安装,之后将ADK包中的\firmware\arduino_libs下的两个文件夹拷贝到arduinoIDE安装目录下的\libraries中,然后打开IDE,从IDE中打开ADK包中的\firmware\demokit\demokit.pde,编译就行了通过第三步产生的apk传到手机,以及第四步的pde选择好对应的板子后传到板子上,我们就完成了google标准教程中的内容,如果你的apk能在手机上顺利安装,并且在板子连上打印线(用于供电,你也可以用电源线供电)后,USB HOST SHIELD连上手机时如果出现了警告窗口,恭喜你,剩下的内容你不用看了,你已经打通了手机和板子的通信,剩下的就是写你想要的功能了.如果APK没装成功,或者线连通了手机上没有出现警告窗口,接下来的内容可能会对你有些帮助.三、手机端开发环境的搭建手机端最硬性的条件是手机必须支持到android2.3.4以上的rom,从实际情况来说,即使G1也能刷到 2.3.4以后,所以理论上说所有的android手机都能支持(实际上根据老外研究貌似galaxy S系的手机不支持).我这里使用的就是很早期的HTC G2来做的.有可能你在按google标准做法做了以后,APK安装不上,LOG中显示Package com.google.android.DemoKit requires unavailable shared library b.accessory; failing!这需要你按照下面步骤进行测试和调整(1)关于rom1.如果你的手机通过官方升级渠道能够升级到 2.3.4以后恭喜你,你不用为rom发愁,什么都不做或者做一点拷贝工作就能完成手机端的布置.2.如果你的手机官方升级早已停滞(比如我用的HTC G2)那么你只能刷MOD版的rom,国内比较常见的可以去安卓网或者机锋网搜索你想要的rom,由于不是专门的开发网站,他们的rom比较有局限性,一般都是从国外的rom拉过来改的,国外比较权威的是xda论坛,一般的rom都能找到(/),刷机过程我这里就不赘述了,内容比较多,请不太清楚的读者转到安卓机锋网先学习一下.一般来说,MOD版的rom都有root权限,可以通过如下方式检查你的rom是否支持ADK,拉取根目录下/proc/config.gz出来,解压缩,搜索"CONFIG_USB_ANDROID_ACCESSORY",如果搜索不到或者搜索出来的结果是"# CONFIG_USB_ANDROID_ACCESSORY is not set"那很不幸,这个rom是不支持ADK的,需要再刷其他rom(以HTC G1或者G2这些早期版本来说,ezGingerBread的rom是支持的,但是安装后需要自己设置语言为中文,ezGingerBread的网址:/showthread.php?t=882356)(2)关于运行库以及权限Rom的问题解决后,可以尝试安装一下,很可能还是安装不上,是因为缺少运行库的原因,你可以把模拟器文件中/system/framework/下面的b.accessory.jar文件拷到手机的对应目录下,同时需要把/system/etc/permissions/目录下的b.accessory.xml拷贝到对应目录下,这个目录也被链接到/etc/permissions 的.(如果没有root提权需要用adb命令push文件),这里附上国外解决这个问题的原始链接: https:///ezterry/manifest-gingerbread-DS/issues/32经过这两步,按道理来说应该可以顺利安装上APK了,这时你可以尝试下把板子跟手机连一下观察是否有警告框弹出,如果没有,接着往下看四、ARDUINO端开发环境搭建非常恶心地,google原始提供的pde以及USB HOST SHIELD库并不支持目前市面上常见的USB HOST SHIELD,只需要做一个简单替换即可.先下载USB HOST SHIELD LIB 2.0,地址如下https:///felis/USB_Host_Shield_2.0/downloads解压将arduinoIDE目录下原来的USB_Host_Shield做个备份后删掉,然后将解压得到的目录重命名为USB_Host_Shield打开新USB_Host_Shield目录下\examples\adk\demokit_20\下的pde文件通过arduinoIDE打开,编译,上传到板子上,重新插拔与手机连接的USB线,Cheers,应该有警告框弹出了:),连接打通!附上USB_HOST_SHIELD lib 2.0地址/mcu/google-open-accessory-interface-for-usb-host-shield-library-2-0-released如果还有问题可以联系我,虽然我未必能回答也未必回答及时,但是我会尽力做出反馈的zidongmo@。
android USB Host

USB HostUSB Host,中文意思是USB主模式,是相对于USB accessory(USB副模式)来说的,前者是在android设备上插入一USB设备,android设备做为主机运行;后者也是在android设备上通过USB数据线插入另外一个设备,但插入的设备可以是一个完整的独立主机,也就是可以是另外一个android设备。
需要注意的是以上两种模式在android API level-12以下是不支持的,也就是说只有android3.1及更高的版本才支持这两种模式,下面对USB主模式做一简介:bManager负责管理USB设备的类,你可以在相应代码中通过以下方法获得此对象的一个实例:UsbManager manager = (UsbManager) getSystemService(B_SERVICE);该类提供的主要方法有:1) getDeviceList()获得设备列表,返回的是一个HashMap.;2) hasPermission(UsbDevice device)判断你的应用程序是否有接入此USB设备的权限,如果有则返回真,否则返回false.3) openDevice(UsbDevice device)打开USB设备,以便向此USB设备发送和接受数据,返回一个关于此USB设备的连接。
4) requestPermission(UsbDevice device, PendingIntent pi)向USB设备请求临时的接入权限。
bDevice代表一个USB设备的类,每个设备都包含了一个或多个接口,每个接口又包含一个或多个节点用来与此设备传输数据。
该类的主要方法有:1) getDeviceClass()返回此USB设备的类别,用一个整型来表示。
2) getDeviceId()返回唯一标识此设备的ID号,也用一个整型来表示。
3) getDeviceName()返回此设备的名称,用一个字符串来表示。
CH9343Android应用程序开发手册

CH9343 Android应用程序开发手册版本:V1.1简介CH9343是基于Android Open Accessory协议开发的USB Android Host芯片。
针对USB Android 设备提供了GPIO、PWM、UART、SPI Master、SPI Slave及I2C主机,共6种接口。
用户可以调用相关接口的API与Accessories通讯。
Android Device、CH9343、Accessories三者关系如下图。
CH9343提供的接口需要基于Android 3.1及以上版本系统,用户可以选择上述任一接口与Accessories通讯。
本文档将会重点说明Android Device和CH9343的USB通讯数据格式。
关于Android Open Accessory协议说明,可以参考Google官方文档。
1 Android Device本文档所描述的例子程序皆是在Android 3.1及以上版本系统下编写的。
Android 应用程序的启动参数是定义在accessory_filter.xml文件中的manufacturer、model和version。
基于CH9343开发的Android应用程序主要分为两个部分:图1: WCH CH9343 Android ApplicationsUser Layout:主要由用户根据自己的需求完成相关代码,通过调用CH9343 Interface Layout 提供的GPIO、PWM、UART、SPI Master、SPI Slave或I2C主机接口函数实现。
CH9343 Interface Layout:实现了6种接口模式下的Interface类,提供给User Layout调用。
此外还实现了Android Device和CH9343芯片之间的USB通信,6种不同的接口具有不同的通信协议,具体内容参考后续说明。
2 Android GPIO Demo2.1 GPIOCH9343提供了8个GPIO端口,可配置成输入或输出方式。
安卓android手机修改host文件方法

安卓android手机修改host文件方法方法一Android手机是和Google帐号紧密联系的,很多时候Google帐号无法登录,导致Android市场无法使用。
在电脑上我们通过修改Hosts方法可以解决Google帐号的登录问题,在Android手机上也可以使用这个方法。
具体操作过程是:先通过各种方法让Android手机获取Root权限,之后运行Root Explorer管理器,进入可写状态,找到/system/etc/hosts的文件,将其权限修改为可写。
打开Terminal Emulator,输入su,进入root模式,输入vi /system/etc/hosts 命令,按i进入编辑模式,之后将用户电脑上的hosts文件内容也输入进去。
Android虚拟终端下当vi在编辑模式时,按下“确定”键(Trackball),再按下虚拟键盘上的“1”,就可以退出编辑模式了(CTRL+[),这个时候使用:wq 就可以保存退出了。
之后重启手机即可。
方法二电脑修改法注意:usb设置为调试模式1、手机必须先root,小米可以安卓开发版系统即可2、安卓 adb工具(android debug bridge)3、依次执行下面的命令1、adb root 获得root权限会自动启动server2、adb remount 设置/system为可读写;3、adb pull /system/etc/hosts 将手机的hosts文件复制到PC的C盘根目录4、PC 机上打开hosts文件,修改完成后,保存5、adb push hosts /system/etc/ 将PC机上hosts文件复制到手机4、验证是否修改成功。
Android开发USB通信的实现方法

Android开发USB通信的实现方法我们都知道,一般手机和PC机连接,手机是属于从机的,那么想要把手机变成主机(HOST)改如何实现呢?这就需要代码来实现了。
首先,和开发其他安卓应用一样新建工程,做好相应属性的配置工作。
然后去实现具体的数据接收和发送功能。
以下的代码给大家提供参考。
SDK 的方法:bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)private void sendData() {//byte b = (byte) 129; // (byte) 0x81 Also workint status = connection.bulkTransfer(endPointWrite, toByte(129), 1, 250);}private static byte toByte(int c) {return (byte) (c <= 0x7f ? c : ((c % 0x80) - 0x80));}// for received data from USB HID deviceprivate static int toInt(byte b) {return (int) b & 0xFF;}读写数据:UsbInterface usbInterface = usbDevice.getInterface(0);//USBEndpoint为读写数据所需的节点UsbEndpoint inEndpoint = usbInterface.getEndpoint(0); //读数据节点UsbEndpoint outEndpoint = usbInterface.getEndpoint(1); //写数据节点UsbDeviceConnection connection = usbManager.openDevice(usbDevice);connection.claimInterface(usbInterface, true);//发送数据byte[] byte2 = new byte[64];int out = connection.bulkTransfer(outEndpoint, cmd, cmd.length, 3000);//读取数据1 两种方法读取数据int ret = connection.bulkTransfer(inEndpoint, byte2, byte2.length, 3000);Log.e("ret", "ret:"+ret);for(Byte byte1 : byte2){System.err.println(byte1);}//读取数据2/*int outMax = outEndpoint.getMaxPacketSize();int inMax = inEndpoint.getMaxPacketSize();ByteBuffer byteBuffer = ByteBuffer.allocate(inMax);UsbRequest usbRequest = new UsbRequest();usbRequest.initialize(connection, inEndpoint);usbRequest.queue(byteBuffer, inMax);if(connection.requestWait() == usbRequest){byte[] retData = byteBuffer.array();for(Byte byte1 : retData){System.err.println(byte1);}}*/当然,如何调用安卓系统的USB操作权限,在eoe安卓开发社区都有相应的答案,实现起来也是比较容易的。
Android(安卓)手机(Defy)通过USB设置默认网关上网详细图解教程

Android手机通过USB设置默认网关上网详细图解教程1.安装必备的软件A)首先要确保PC上安装了手机的驱动程序,相信这个大家都装了。
B)安装root权限工具,我用的是superuser,后面会说到怎么使用。
C)安装Gscript,用来一键设置USB上网功能。
2. 设置A)将手机设置为调试模式,我们要做的就是让USB支持调试模式。
步骤:将Application Settings/Development/USB debugging 勾选上。
B1)将手机设置为可以通过USB共享PC网络(Defy)步骤:将Wireless & networks/Mobile networks/internet tethering 勾选上。
B2)有的手机设置通过USB共享PC网络的方式可能不同,你可能看到的是下面这种共享设置的方式步骤:将绑定/USB绑定勾选上C)将PC上的USB线与手机连接电脑网络连接里会多出一个本地连接,为方便查看我把名称改为android右键查看电脑本身上网通过的网络连接的属性(如果你的电脑端使用有线网络上网,则打开“本地连接”;如果你的电脑端使用无线网络上网,则打开“无线网络连接”;如果你使用电脑中的拨号上网,则打开拨号用的宽带连接),我的是有线连接,我打开“本地连接”的属性,选择“高级”选项卡,勾选“允许其他网络用户通过此计算机的Internet连接来连接”,确定。
(如果你有多个其他网卡,可能需要像下面右侧的图中选择“手机网络共享”连接,这个图是从其他地方拿来的)此时,双击查看“手机网络共享”的状态,查看“支持”选项卡中的内容,可以看到“IP地址”被系统自动设为了192.168.16.1。
(这很重要,该IP地址要与脚本中的IP地址一致,你可以按照你所处的环境来修改IP地址、子网掩码、和网关,但请确保它们与脚本中的设置一致。
)PC端的设置完毕,且以后不必再更改。
D)安装Gscript,并按add script添加一个自定义的脚本online-usb,然后保存。
Android:USB设备信息获取

Android:USB设备信息获取lsusb:查看系统当前连接的所有USB设备cat /sys/kernel/debug/usb/devices :每个USB设备及其配置描述符T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1 //第⼀层 EHCI 控制器B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1P: Vendor=1d6b ProdID=0002 Rev= 5.04S: Manufacturer=Linux 5.4.86-android11-2-g9b3456a83314-dirty xhci-hcdS: Product=xHCI Host ControllerS: SerialNumber=xhci-hcd.0.autoC:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mAI:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hubE: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256msT: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 4 //第⼆层 HUBD: Ver= 2.10 Cls=09(hub ) Sub=00 Prot=02 MxPS=64 #Cfgs= 1P: Vendor=2109 ProdID=2817 Rev=90.13S: Manufacturer=VIA Labs, Inc.S: Product=USB2.0 HubS: SerialNumber=000000000C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mAI: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=01 Driver=hubE: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=256msI:* If#= 0 Alt= 1 #EPs= 1 Cls=09(hub ) Sub=00 Prot=02 Driver=hubE: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=256msT: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 11 Spd=480 MxCh= 0 //第三层连接到HUB上的设备D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1P: Vendor=0bda ProdID=b812 Rev= 2.10S: Manufacturer=RealtekS: Product=802.11ac NICS: SerialNumber=123456C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mAI:* If#= 0 Alt= 0 #EPs= 5 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0msE: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0msE: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0msE: Ad=87(I) Atr=03(Int.) MxPS= 64 Ivl=500usE: Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=0mscat /proc/bus/input/devices :查看连接的输⼊设备信息cat sys/bus/usb/devices/2-1.1/ :查看对应USB设备的详细信息,例如 2-1.1:1.0 命名规则是:roothub-port:configuration.interface.)cat /sys/bus/usb/devices/2-1.1\:1.0/bInterfaceClass :查看当前设备所⽀持的特性,例如: 01 表⽰⽀持audio只查看连接设备的端⼝信息:# ls /sys/bus/usb/drivers/usb/1-1 1-1.2 1-1.2.3.1 1-1.3.1 2-1 2-1.2.3 uevent usb11-1.1 1-1.2.3 1-1.3 1-1.3.3 2-1.2 bind unbind usb2查看主次设备号:# cat /sys/bus/usb/devices/1-1.4/ueventMAJOR=189MINOR=9DEVNAME=bus/usb/001/010DEVTYPE=usb_deviceDRIVER=usbPRODUCT=bda/b812/210TYPE=0/0/0BUSNUM=001DEVNUM=010\system\core\libusbhost\usbhost.c\frameworks\base\services\core\jni\com_android_server_UsbHostManager.cpp\frameworks\base\core\java\android\hardware\usb\UsbInterface.java\frameworks\base\services\usb\java\com\android\server\usb\UsbHostManager.java \frameworks\base\services\usb\java\com\android\server\usb\UsbService.java。
USB设备分类:HOST,OTG,DEVICE

USB 设备分为三种:HOST,OTG,DEVICE。其中 ID 脚在 OTG 功能中 才使用。 A,如果你的系统自己仅仅是用做 Slave,那幺就使用 B 接口。任何时候 都悬空,都做 Slave。 如果是 OTG 设备,它的系统控制器会判断外部设备的 ID 脚的电平,决 定是什幺样的设备插入: B,如果是高电平,则是 B 接头插入,此时 OTG 设备就做主模式 (master mode); C,如果 ID 为低,则是 A 接口插入,然后 OTG 设备就会使用 HNP 对话 协议来决定它跟外设哪个做 Master,哪个做 Slave。 D,还有种主动 OTG 设置,就是接入外设后,在 OTG 设备中点击 HOST
ቤተ መጻሕፍቲ ባይዱ
在微型 A 插头中,ID 引脚接地,在微型 B 插头中,ID 引脚悬空。在 OTG 中,如果设备的 ID 引脚接地(如图 l 右侧的设备),则此设备默认为主 机,否则为外设。同时,在设备连接使用过程中,通过主机协商协议,允许 主机和外设功能互换。例如,假设图 1 左边的 B-Device 为 1 个手持 PDA,右 边的 A-Device 为 1 个打印机。由于连接线的关系,打印机初始化为主机。但 是打印机的驱动程序存在 PDA 中,这时需要 PDA 作为主机,打印机作为外 设。通过 HNP 可以方便实现此功能,而不必拔下连接线调换插头方向,重新 连接打印机和 PDA。
使能,会强制 ID 拉低。此时的 Master 和 Slave 关系确定。 我们手机上一般用的都是 B 型 Mini-USB 口 (1)USB (2)Mini USB (3)总结 从左往右依次为:miniUSB 公口(A 型插头)、miniUSB 公口(B 型插 头)、USB 公口(B 型)、USB 母口(A 型插座)、USB 公口(A 型插头) 。 (4)OTG 特性:既能充当 HOST 又能用做 Device,即 DRD(Dual-role-devices); OTG 设备依然可以连接到 PC 上用做普通的外设,即 POD(Peripheral-Only Device)。协议简述:USB OTG 中引入了两个新的协议, SRP(Session Request Protocol)和 HNP(Host NegoTIaTIon Protocol),即会话请求协议和 主机交流协议。
Android平板电脑操作手册

Android平板电脑操作手册注意:不同Android平板电脑操作界面会有所不同,但基本元素和操作方法是类似的,该操作手册仅提供一种界面下的操作介绍,当操作不同的Android平板电脑时,该手册都可作为参考。
1. 基本设置设置:点击菜单页面中的设置图标进入设置界面。
1.1 无线控制•管理WIFI设置,进行无线网络连接1• Wi-Fi :打开/关闭 Wi-Fi-- Wi-Fi 提示“打开WI-FI ”时,右侧图标显示为”“,表示WIFI 处于关闭状态。
-- 单击”Wi-Fi “,状态提示”正在打开… “,右侧图标显示为”“,表示WIFI 处于打开状态。
• Wi-Fi 设置 :设置和管理无线接入点-- 网络通知右侧图标显示为”“,表示自动扫描处于关闭状态。
-- 单击”网络通知“,右侧图标显示为”“,表示扫描处于打开状态,设备将自动搜索添加附近可连接的WiFi网络,点击无线网络端,即可连接至网络。
连接成功后,在WIFI设置图标下显示为“已连接至…”,表示已连接上网络。
1.2 声音和显示•设置铃声、通知和屏幕亮度• 静音模式:除媒体和闹钟之外的所有声音都被静音。
•扬声器模式:使用扬声器。
•响铃音量:设置通知音的大小。
•媒体音量:调整媒体音量。
在横条上左右移动点击可调节媒体音量设置。
•通知铃声:设置默认的通知铃声。
•操作音选择:进行屏幕选择时发出声音。
• SD卡通知:禁用SD卡通知声音。
23• 方向:旋转MID 时自动改变方向 • 动画:打开和关闭窗口时显示动画• 亮度:调整屏幕亮度。
在横条上左右移动点击可调节亮度设置• 屏幕待机:在屏幕自动关闭前调整延迟。
有15秒、30秒、1分钟、2分钟、10分钟、从不待机六种时间选项可选择1.3 安全性和位置 • 设置我的位置、密码选项• 使用无线网络:通过无线网络查看应用程序(例如Google 地图)中的位置 • 可见的密码:键入时显示密码1.4 应用程序 • 管理应用程序,设置快速启动快捷键4• 未知源:选择是否允许安装非市场应用程序 • 快速启动:设置启动应用程序的键盘快捷键 • 管理应用程序:管理和删除安装的应用程序 • 开发:设置应用程序的开发选项1.5 SD 卡和MID 存储 • 卸下SD 卡,查看可用的存储空间5【注】:请通过选项中的“删除SD 卡”以安全移除 SD 卡,避免热拔插造成对设备的损坏。
CH34xUart_Android_Dvlp_Guide_V1.2

CH34x 系列芯片串口功能Android程序开发说明版本: 1.2简介CH34x系列芯片是USB 总线的转接芯片,主要包含CH340、CH341、CH345,通过USB总线提供异步串口、打印口、并口、MIDI以及常用的2线和4 线等接口。
本文档主要介绍其中CH340/CH341的USB转异步串口功能(以下简称CH34x UART),以及Android 下如何使用APK操作CH34x实现串口通讯。
该功能基于Android USB Host协议完成,用户可调用相关的接口API实现与Android设备进行通讯。
Android Host、USB Device、串口设备三者关系如下图。
USB HOST USB DeviceCH34x串口提供的Android接口需要基于Android 3.1及以上版本系统,使用CH34x串口Android 驱动条件:1、需要基于Android 3.1及以上版本系统2、Android设备具有USB Host或OTG接口本文档将会重点说明Android USB Host与Device的通讯接口API以及测试程序的操作说明。
关于Android USB Host协议说明,可以参考Google官方文档。
1、Android Host本文档所描述的例子程序皆是在Android 3.1及以上版本系统下编写的。
Android 应用程序的启动参数是定义在device_filter.xml文件中的product-id和vendor-id。
基于CH34x UART开发的Android应用程序主要分为两个部分,如下图:2、Android USB To Uart Demo2.1 UART针对CH34x UART的操作提供了EnumerateDevice、OpenDevice、UartInit、SetConfig、WriteData 和ReadData方法以及WriteTimeOutMillis和ReadTimeOutMillis属性,实现与CH34x UART功能模块的通讯。
android通过usb读取U盘的方法

android通过usb读取U盘的⽅法本⽂实例为⼤家分享了android通过usb读取U盘的具体代码,供⼤家参考,具体内容如下1.关联 compile ‘com.github.mjdev:libaums:+'2.权限设置<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="b.host" android:required="false" /><uses-feature android:name="b.host" android:required="true" />3.监听u盘插⼊拔出的⼴播//监听otg插⼊拔出IntentFilter usbDeviceStateFilter = new IntentFilter();usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);mContext.registerReceiver(UDiskMountedReceiver, usbDeviceStateFilter);//注册监听⾃定义⼴播IntentFilter filter = new IntentFilter(Constant.ACTION_USB_PERMISSION);mContext.registerReceiver(UDiskMountedReceiver, filter);4.代码package btest;/*** @项⽬名: UsbTest* @包名: btest* @⽂件名: ReadUDisk* @创建者: 25934* @创建时间: 2018-07-24 13:50* @描述: TODO*/import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import bManager;import android.util.Log;import bMassStorageDevice;import com.github.mjdev.libaums.fs.FileSystem;import bFile;import com.github.mjdev.libaums.partition.Partition;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;import parator;import java.util.List;import static btest.Constant.ACTION_USB_PERMISSION;public class ReadUDisk {private UDiskCallBack.OnUDiskCallBack mOnUDiskCallBack = null;private Context mContext;private UsbMassStorageDevice[] storageDevices;private List<UsbFile> usbFiles = new ArrayList<>();private final UsbManager mUsbManager;public ReadUDisk(Context context) {mContext = context;mUsbManager = (UsbManager) mContext.getSystemService(B_SERVICE);}/*** 接受U盘插⼊和拔出事件* @param onUDiskCallBack*/public void setOnUDiskCallBack(UDiskCallBack.OnUDiskCallBack onUDiskCallBack) {if (mOnUDiskCallBack == null) {registerReceiver();mOnUDiskCallBack = onUDiskCallBack;}}/*** 注册⼴播接收者*/public void registerReceiver() {//监听otg插⼊拔出IntentFilter usbDeviceStateFilter = new IntentFilter();usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);mContext.registerReceiver(UDiskMountedReceiver, usbDeviceStateFilter);//注册监听⾃定义⼴播IntentFilter filter = new IntentFilter(Constant.ACTION_USB_PERMISSION);mContext.registerReceiver(UDiskMountedReceiver, filter);Log.e("ReadUDisk", "registerReceiver: ");}/*** 注销⼴播接收者*/public void unReisterReceiver() {if (UDiskMountedReceiver != null) {mContext.unregisterReceiver(UDiskMountedReceiver);}}/*** 检查usb设备的权限* @param device* @return*/public boolean checkPerssion(UsbMassStorageDevice device) {if (mUsbManager==null){return false;}if (mUsbManager.hasPermission(device.getUsbDevice())) {//有就直接读取设备是否有权限return true;} else {return false;}}/*** 读取当前usb设备的数量* @return*/public int getDeviceCount() {//获取存储设备UsbMassStorageDevice[] storageDevices =UsbMassStorageDevice.getMassStorageDevices(mContext); return storageDevices.length;}/*** 根据position获取usb设备* @param position* @return*/public UsbMassStorageDevice getUsbMassDevice(int position) {//获取存储设备UsbMassStorageDevice[] storageDevices =UsbMassStorageDevice.getMassStorageDevices(mContext); if (position > storageDevices.length) {return null;} else {return storageDevices[position];}}/*** 获取usb上所有的存储设备* @return*/public UsbMassStorageDevice[] getUsbMassAllDevice() {//获取存储设备UsbMassStorageDevice[] storageDevices =UsbMassStorageDevice.getMassStorageDevices(mContext);return storageDevices;}/*** 根据设备获取路径* @param device* @return*/public FileSystem readDevice(UsbMassStorageDevice device) {try {if (!checkPerssion(device)){ //检查是否有权限return null;}device.init();//使⽤设备之前需要进⾏初始化Partition partition = device.getPartitions().get(0); //仅使⽤设备的第⼀个分区FileSystem currentFs = partition.getFileSystem();// currentFs.getCapacity(); //容量⼤⼩// currentFs.getOccupiedSpace(); //已使⽤⼤⼩// currentFs.getFreeSpace(); //未使⽤的⼤⼩UsbFile root = currentFs.getRootDirectory();//获取根⽬录String deviceName = currentFs.getVolumeLabel();//获取设备标签return currentFs;} catch (Exception e) {e.printStackTrace();return null;}}/*** 获取U盘的⽂件和⽂件夹路径* @param fileSystem* @return*/public List<UsbFile> getUsbFiles(FileSystem fileSystem) {usbFiles.clear();try {for (UsbFile file : fileSystem.getRootDirectory().listFiles()) { //将所以⽂件和⽂件夹路径添加到usbFiles数组中usbFiles.add(file);}Collections.sort(usbFiles, new Comparator<UsbFile>() {//简单排序⽂件夹在前⽂件在后 @Overridepublic int compare(UsbFile oFile1, UsbFile oFile2) {return oFile1.isDirectory()-1: 1;}});} catch (IOException e) {e.printStackTrace();}return usbFiles;}private BroadcastReceiver UDiskMountedReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();switch (action) {case ACTION_USB_PERMISSION: //⾃定义权限⼴播if (mOnUDiskCallBack != null) {mOnUDiskCallBack.onPermissionCallBack();}break;case UsbManager.ACTION_USB_DEVICE_ATTACHED: //usb设备插⼊⼴播if (mOnUDiskCallBack != null) {mOnUDiskCallBack.onAttachDeviceCallBack();}break;case UsbManager.ACTION_USB_DEVICE_DETACHED: //usb设备拔出⼴播if (mOnUDiskCallBack != null) {mOnUDiskCallBack.onDetachDeviceCallBack();}break;}}};}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
USBHOST与USBOTG的区别是什么功能上有什么差异

这个解释起来好麻烦,l z慢慢看简单地说,OTG就是On T he Go,正在进行中的意思,也就是可以直接传输,就是可以从一个机器直接传到另一个机器中,举个例子未来的一天,我拿着M EIZU最新产品“E X”来到学校,听着“EX”里面装着的我最新下载的一首新歌,我的一个好朋友夺下我的耳塞想听听这首歌,她一边听一边陶醉地说:“我找这首歌已经很久了,可是一直都没有能downl oad到,你是在哪儿找到的???”我笑着要她拿出她的Mp3,同时我从钥匙扣上取下一条便携的数据线,数据线的一头插在“EX”上,另一头插在她的Mp3上,我打开“E X”的菜单,选中了基于OTG技术的传输模式,直接将这首好听但是难找的歌“拷”到了她Mp3上,她非常惊讶,直到她在自己的M p3上听到了这首歌才相信这一切都是是真的……,呵呵呵usb h ost USB设备分为H OST(主设备)和S LAVE(从设备),只有当一台HOST与一台SLA VE连接时才能实现数据的传输。
简单的说,如果一个数码设备支持USB HOST,那么它就可以从另外一个USB设备中取得数据。
U SB HO ST线可以使得很多智能手机支持连接鼠标、键盘、硬盘、U盘、M P3、US B游戏手柄、USBHUB、U SB网卡、USB打印机、手机、USB S IM手机卡读卡器等一堆设备,好处多多所以一句话来说:一般情况下OTG和H OST的区别就是ho st支持的东西多一点,otg传输方便点,不需要别的机器上有从设备的接口就能传输,就说真么多了什么是usbhost?USB是英文Un ivers al Se rialBus的缩写,中文含义是“通用串行总线”。
在USB中USBHOST是通过各种描述符来识别设备的

在USB中USBHOST是通过各种描述符来识别设备的随着技术的不断发展, USB(通用串行总线)已经成为了连接各种设备的主要方式。
在 USB 中,USBHOST 是用于识别、管理和连接 USB 设备的主机端,而 USB 设备则是被动接受主机指令并执行操作的从属端。
在 USBHOST 与设备之间的通讯过程中,USBHOST 首先需要对设备进行识别,然后才能对其进行管理和使用。
本文将介绍 USBHOST 是如何通过各种描述符来识别设备的。
什么是 USB 描述符?在 USB 中,描述符起着至关重要的作用。
USB 描述符是用于描述 USB 设备的结构,可以理解成USB 设备的一份数据结构,包含了设备的基本信息、功能特点、支持的协议和接口等信息。
插入 USB 设备后,USBHOST 会从设备中读取一些关键的描述符,通过这些描述符,USBHOST 可以识别出连接的设备,并以正确的方式进行管理和控制。
USB 描述符分为设备描述符、配置描述符、接口描述符等。
其中,设备描述符是必须的;而配置描述符和接口描述符则是通过设备描述符间接引用的。
下面将详细介绍每种描述符的作用和结构。
设备描述符设备描述符是用于描述USB 设备的基本信息,包括设备的供应商ID、产品ID、设备版本号、设备类等。
设备描述符有18个字节长,其中,字节1为描述符的长度,字节2为描述符类型(值为0x01表示设备描述符),字节3和字节4表示USB规范的版本号。
字节5和字节6表示USB设备的类别、子类别和协议码,字节7为USB设备可处理的最大数据包大小,字节8为设备的厂商ID,字节9为设备的产品ID,字节10和11为设备的版本号,字节12至18为USB设备的其他描述符。
配置描述符配置描述符用于描述 USB 设备的配置信息,包括该配置的总长度、配置号、接口数、供电方式等。
配置描述符由配置描述符首部和接口描述符组成。
需要注意的是,在 USB 中,配置描述符中的一个设备可以包含多个接口描述符。
Android开启OTG功能USBHostAPI功能

Android开启OTG功能USBHostAPI功能Android USB 模式简介设备模式当计算机或其他USB主机需要连接安卓设备时,此时安卓设备是作为“USB设备”角色的,在计算机上显示为 USB 外设。
现在的安卓设备已经被赋予了愈加丰富的功能,如MTP相机模式、文件传输模式(类似于U盘)、RNDIS网卡模式等。
当使用普通手机数据线连接安卓手机和电脑就可以使用这些功能。
主机模式Android 设备充当USB主机,安卓此时充当类似于计算机PC的角色,可以连接键盘、鼠标、U盘以及嵌入式应用USB转串口、转I2C 等设备。
注意,此时不能再使用普通数据线,而应该使用OTG(On-The-Go)转接线。
原理是Android设备通过USB接口中的ID信号线状态决定其接口是工作在主机还是设备模式。
如下为OTG转接头:配件模式设备模式与配件模式之间的区别在于,在配件模式下,除了adb 之外,主机还可以看到其他 USB 功能。
Android 设备从设备模式开始运行,然后通过重新协商过程转换到配件模式。
除了提供AOA功能外,还额外提供了音频功能。
如:安卓Host AOA接口转换芯片CH9343。
Android主机模式的开启如上文主机模式的介绍,开启Android OTG主机功能,务必使用OTG转换线,确认是否成功可以通过连接的外设是否可以从Android 设备USB口是否有电来确认,若仍没有电,其一可以查看设备厂商规格书,其二可以点击系统的“设置”,查看有无主动开启OTG功能的菜单项。
若如上主机功能可以顺利开启,那么我们的安卓设备就可以连接键盘、鼠标、U盘这些常用外设了。
除此类设备之外,安卓系统还提供了一套USB Host API可以支持直接通过应用程序和USB设备通讯,而无需预置设备的USB驱动。
该功能极大的提高了安卓设备使用USB 产品的灵活性,用户端仅安装APK安卓软件即可。
如客户使用安卓连接USB转串口设备CH340、USB转多串口设备CH342或者用户使用USB MCU开发的自定义厂商类设备、HID设备等使用场景。
USB HOST与 USB OTG的区别是什么,功能上有什么差异

(2)作为A设备时,需要具有VBUS监视和供电电路;作为B设备初始化SRP时,需要监视和触发VBUS。
(3)具有ID输入引脚。作为两用OTG设备,ASIC、DSP或其它与收发器连接的电路必须具备充当外设和主机的功能,并应按照HNP协议转换其角色。
收发器所需添加的大多数电路用于VBUS引脚的管理。作为主机,它必须能够提供5V、输出电流可达8mA的电源。图3中的模拟开关用于配置收发器的各种功能。
ASIC和控制器还必须包含USB主机逻辑控制功能,包括发送SOF(帧启动)包、发送配置\u36755输入\u36755输出数据包,在USB 1 msec帧内确定传输进程、发送USB复位信号、提供USB电源管理等。
Maxim要提供的USB OTG方案
MAX3301E是Maxim公司研制的一款USB OTG收发器,该器件集成有电荷泵,可将PDA、蜂窝电话和数码相机等移动设备与USB外设直接连接而无需PC机的参与。采用MAX3301E和一个嵌入式USB主机,就可直接将诸如打印机或外部硬盘驱动器这样的外设连接。MAX3301E内部包括USB OTG收发器、UBUS电荷泵、线性稳压器和I2C 2线串行接口。内部电平转换器使MAX3301E能够与采用+1.65至+3.6V逻辑电源电压的器件连接。MAX3301E中的电荷泵工作在+3V至+4.5V输入电源下,可产生符合OTG要求的VBUS输出,且输出电流大于8mA。该器件可利用内部比较器控制并测量VBUS,同时支持USB OTG SRP和HNP。
这个解释起来好麻烦,lz慢慢看
简单地说,OTG就是On The Go,正在进行中的意思,也就是可以直接传输,就是可以从一个机器直接传到另一个机器中,举个例子 未来的一天,我拿着MEIZU最新产品“EX”来到学校,听着“EX”里面装着的我最新下载的一首新歌,我的一个好朋友夺下我的耳塞想听听这首歌,她一边听一边陶醉地说:“我找这首歌已经很久了,可是一直都没有能download到,你是在哪儿找到的???”我笑着要她拿出她的Mp3,同时我从钥匙扣上取下一条便携的数据线,数据线的一头插在“EX”上,另一头插在她的Mp3上,我打开“EX”的菜单,选中了基于OTG技术的传输模式,直接将这首好听但是难找的歌“拷”到了她Mp3上,她非常惊讶,直到她在自己的Mp3上听到了这首歌才相信这一切都是是真的……,呵呵呵
蓝牙 hid

Android USB Host与HID通讯(一)去年9月份来到现在的公司,接到新公司的第一个项目就是Android USB Host与HID通讯,当时也什么都不懂,就拿着google的api 开发指南(/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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
USB HostUSB Host,中文意思是USB主模式,是相对于USB accessory(USB副模式)来说的,前者是在android设备上插入一USB设备,android设备做为主机运行;后者也是在android设备上通过USB数据线插入另外一个设备,但插入的设备可以是一个完整的独立主机,也就是可以是另外一个android设备。
需要注意的是以上两种模式在android API level-12以下是不支持的,也就是说只有android3.1及更高的版本才支持这两种模式,下面对USB主模式做一简介:UsbManagerbManager负责管理USB设备的类,你可以在相应代码中通过以下方法获得此对象的一个实例:UsbManager manager=(UsbManager)getSystemService(B_SERVICE);该类提供的主要方法有:getDeviceList()()1)getDeviceList获得设备列表,返回的是一个HashMap.;hasPermission((UsbDevice device)2)hasPermission判断你的应用程序是否有接入此USB设备的权限,如果有则返回真,否则返回false.3)openDeviceopenDevice((UsbDevice device)打开USB设备,以便向此USB设备发送和接受数据,返回一个关于此USB设备的连接。
4)requestPermissionrequestPermission((UsbDevice device,PendingIntent pi)向USB设备请求临时的接入权限。
UsbDevicebDevice代表一个USB设备的类,每个设备都包含了一个或多个接口,每个接口又包含一个或多个节点用来与此设备传输数据。
该类的主要方法有:1)getDeviceClassgetDeviceClass()()返回此USB设备的类别,用一个整型来表示。
getDeviceId()()2)getDeviceId返回唯一标识此设备的ID号,也用一个整型来表示。
getDeviceName()()3)getDeviceName返回此设备的名称,用一个字符串来表示。
getDeviceProtocol()()4)getDeviceProtocol返回此设备的协议类别,用一个整型来表示。
5)getDeviceSubclassgetDeviceSubclass()()返回此设备的子类别,用一个整型来表示。
getVendorId()()6)getVendorId返回生产商IDgetProductId()()7)getProductId返回产品ID8)getInterfaceCountgetInterfaceCount()()返回此设备的接口数量(int index)9)getInterfacegetInterface(int得到此设备的一个接口,返回一个UsbInterface。
UsbInterfacebInterface代表USB设备的一个接口,注意:UsbInterface本身是一个类,并不是一个接口。
此类的主要方法有以下:getId()()1)getId得到给接口的id号。
getInterfaceClass()()2)getInterfaceClass得到该接口的类别。
3)getInterfaceSubclassgetInterfaceSubclass()()得到该接口的子类。
getInterfaceProtocol()()4)getInterfaceProtocol得到该接口的协议类别。
5)getEndpointCountgetEndpointCount()()获得关于此接口的节点数量。
(int index)getEndpoint(int6)getEndpoint对于指定的index获得此接口的一个节点,返回一个UsbEndpoint. UsbEndpointbEndpoint代表一个接口的某个节点的类。
该类主要提供了一下方法供你使用:1)getAddressgetAddress()()获得此节点的地址2)getAttributesgetAttributes()()获得此节点的属性getDirection()()3)getDirection获得此节点的数据传输方向UsbDeviceConnectionbDeviceConnection代表USB连接的一个类。
用此连接可以想USB设备发送和接收数据,可以通过调用该方法openDevice(UsbDevice)来得到该类的一个实例。
该类提供了以下方法供你使用:1)bulkTransfer(UsbEndpoint endpoint,byte[]buffer,int length, int timeout)通过给定的endpoint来进行大量的数据传输,传输的方向取决于该节点的方向,buffer是要发送或接收的字节数组,length是该字节数组的长度。
传输成功则返回所传输的字节数组的长度,失败则返回负数。
2)controlTransfer(int requestType,int request,int value,int index,byte[]buffer,int length,int timeout)该方法通过0节点向此设备传输数据,传输的方向取决于请求的类别,如果requestType为USB_DIR_OUT则为写数据,USB_DIR_IN,则为读数据Android配置文件要求在你使用以上API进行开发之前,你需要在你的AndroidManifest.xml文件中添加以下内容:1.因为并不能保证所有的安卓设备都支持以上API,所以你需要声明:<uses-sdk android:minSdkVersion="12"/>12以下的版本是不支持以上APId的。
<uses-feature android:name="b.host"/>2.如果你想有一个USB设备接入你的安卓设备时能够通知你的应用程序,那么你需要在你的Activity标签中声明以下内容<intent-filter><actionandroid:name="B_DEVICE_ ATTACHED"/></intent-filter><meta-dataandroid:name="B_DEVIC E_ATTACHED"android:resource="@xml/device_filter"/>Resource属性指定了要过滤的数据设备信息,包括:1)vendor-id设备生产商id2)product-id设备id3)class设备类别4)subclass设备子类5)protocol(device or interface)协议类别device_filter.xml文件放在res\xml目录下,其中文件名不包括扩展名部分需要与<meta-data/>标签中声明的一致。
示例如下:<?xml version="1.0"encoding="utf-8"?><resources><usb-device vendor-id="1234"product-id="5678"class="255"subclass="66"protocol="1" /></resources>开发步骤1.检测设备你的应用可以通过两种方式来发现USB设备,一种是用一个意图过滤器在用户连接一个设备时对其进行通知,另一种则是通过枚举您已经连接的所有USB设备。
如果你希望你的应用能够自动的探测到你想要的设备,请使用一个意图过滤器来做。
但是,如果你希望得到一个已连接设备的列表或者你不希望过滤意图,枚举所有的设备会是一个更好的选择。
1)Intent Filter为了让应用可以发现一个特定的USB设备,你可以为B_DEVICE_ATTACHED这个意图指定一个意图来进行过滤。
伴随着这个意图过滤器,您需要指定一个资源文件来特别说明这个USB设备的属性,例如供应商和产品ID。
当用户连接到一个符合你配件过滤条件的配件时,这个系统会谈出一个对话框询问他们是否希望开始你的应用。
如果用户同意,那么你的应用在失去连接之前会自动获取和设备连接的权限。
下面的例子告诉你该如何声明这个意图过滤器:<activity...>...<intent-filter><action android:name="B_DEVICE_ATTACHED"/> </intent-filter><meta-data android:name="B_DEVICE_ATTACHED"android:resource="@xml/device_filter"/></activity>下面的例子告诉你怎么样声明指定你希望连接的USB设备的相关资源文件:<?xml version="1.0"encoding="utf-8"?><resources><usb-device vendor-id="1234"product-id="5678"/></resources>2)列举设备你可以通过UsbMnanger来列举已经连接的USB设备:代码如下首先,得到UsbMnanger的一个实例UsbManager manager=(UsbManager)getSystemService(B_SERVICE);其次,通过此类的getDeviceList()方法得到包含所有已连接的USB设备的列表HashMap<String,UsbDevice>deviceList=manager.getDeviceList();最后,通过设备名称来得到给设备对象UsbDevice device=deviceList.get("deviceName");如果你想一个一个的列举所有的设备,可以实用迭代器,代码实例如下:UsbManager manager=(UsbManager)getSystemService(B_SERVICE);HashMap<String,UsbDevice>deviceList=manager.getDeviceList();Iterator<UsbDevice>deviceIterator=deviceList.values().iterator();while(deviceIterator.hasNext()){UsbDevice device=deviceIterator.next()//在这里添加处理设备的代码}2.获得和设备通信的权限如果你实用intent filter来发现一个USB设备,即上述方法1)那么应用程序可以自动的获取权限;如果是使用方法2)来检测USB设备,则你需要显示声明权限。