Android开启OTG功能/USB Host API功能
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设备等使用场景。
当然因为该特性并非所有安卓厂商都会强制支持和开放,所以我们需要通过以下方式来确认或者进行必要的配置来开启该功能。
Android USB Host API功能的确认和开启
步骤一:确定 Android 设备是否支持 USB Host 功能,具体可以通过以下步骤进行确认:
1. 查看手机或平板设备参数,或者直接联系厂家咨询;
2. 使用 UsbHostDiagnostics.APK 安卓应用软件直接进行检测,汉化版软件名称为:USB 主机诊断;
Note:若步骤1提示支持,则无需进行如下步骤。
步骤二:确认系统是否包含 USB Host API 相关的库文件,习惯也称驱动文件。存放路径为:/system/lib。
通过手机助手工具或者直接使用“adb shell”连接手机,进入该目录进行查看,以我的手机为例,通过 adb 查看结果如下图所示:

如果没有该文件,可以咨询厂家或者拷贝相同处理器的安卓系统下的该文件至此目录下。
步骤三:确认 Android 系统是否已经开放了 USB Host 权限,这一步也是最重要的一步。
由于需要修改系统文件,所以要保证 Android 设备已经具有 Root 权限,否则会遇到各种未知的问题。Root 之后,可以通过手机助手或者“ES文件浏览器”等软件等操作系统文件。
进入目录“/system/etc/permissons”,查看该目录下,是否有文件“android.hardware.usb.host.xml”,如果没有,则需要自己创建一个或者直接从其他系统中拷贝过来。之后打开该文件,添加如下内容:
<permissons>
<feature name="android.hardware.usb.host"/>
</permissons>
在该文件下查找是否存在名称为“handheld_core_hardware.xml”或者“tablet_core_hardware.xml”的文件。同理,未找到需要新建或者拷贝过来。打开文件,在 <permissions> section 中添加如下内容:
<feature name="android.hardware.usb.host">
添加完成后文件内容如下所示:

步骤四:非常重要,就是重启 Android 设备。
注:查看安卓系统的 CPU 信息,可以进入“adb shell”之后,通过“cat /proc/cpuinfo”查看。
读者也可以移步至《CH340安卓应用开发指南》,来了解关于此用法的详情。
Android开启OTG功能/USB Host API功能的更多相关文章
- 翻译Android USB HOST API
翻译Android USB HOST API 源代码地址:http://developer.android.com/guide/topics/connectivity/usb/host.html 译者 ...
- Android Service创建USB HOST通信
之前做了一个关于Android USB通信的Case,通过Android的USB总线给Zigbee供电,和板载的Zigbee(基于Zigbee的自组网)进行通信.要使用Android的USB Host ...
- 【转】Android Service创建USB HOST通信
之前做了一个关于Android USB通信的Case,通过Android的USB总线给Zigbee供电,和板载的Zigbee(基于Zigbee的自组网)进行通信.要使用Android的USB Host ...
- 『翻译』Android USB Host
USB Host When your Android-powered device is in USB host mode, it acts as the USB host, powers the b ...
- 【转】Android实战技巧之四十九:Usb通信之USB Host
零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一. 硬件上,它是用插头连接.一边是公头(plug),一边是母头(receptacle).例如,PC上的插座就是母头 ...
- USB HOST与 USB OTG的区别及工作原理
在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!!! 转自USB HOST与 ...
- Android 4.3正式发布:四大新功能一览
在旧金山举行的新品发布会上,Google正式发布了Android 4.3,代号仍为“Jelly Bean”.此次更新并没有太大改变,只是紧跟4.1.4.2步伐, 新增了低功耗蓝牙.多用户登录等一系列功 ...
- Android USB Host 与 HID 之通讯方法
Android USB Host与HID通讯,就目前Google Developer提供的方法有bulkTransfer()与controlTransfer(),看是简简单单的两个方法,要实现真正的通 ...
- Android USB Host框架
Android 下的usb框架及功能点:https://blog.csdn.net/tianruxishui/article/details/379029591.Android framework中* ...
随机推荐
- windows下载安装JDK8
一 .下载链接 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 根据自己的电脑安 ...
- CTF中常见密码学
前言 参考,我们任课老师的WORD和PPT,结合自己的理解,在结合网上文章的理解. 一.BASE64编码 BASE64编码中,特征和所拥有的字符字母:A-Z a-z;数字:0-9;符号:+ / ,然后 ...
- k8s中应用GlusterFS类型StorageClass
GlusterFS在Kubernetes中的应用 GlusterFS服务简介 GlusterFS是一个可扩展,分布式文件系统,集成来自多台服务器上的磁盘存储资源到单一全局命名空间,以提供共享文件存储. ...
- 1.Spring开发环境搭建——intellj
1.在intellj中新建项目,选择JDK版本(1.8版本) 2.选择相关信息填写,注意Java版本要和上面步骤选择的版本一致. 3.选择springBoot版本,勾选Spring Web选项. 4. ...
- OAuth2.0之OLTU实现举例
一.场景 三个角色:用户(user),web应用(client),资源服务器和授权服务器合为服务器(server) 用户登录登录后可查看自己的信息 二.准备 2.1 数据库 schema drop t ...
- c++ web框架实现之静态反射实现
0 前言 最近在写web框架,框架写好后,需要根据网络发来的请求,选择用户定义的servlet来处理请求.一个问题就是,我们框架写好后,是不知道用户定义了哪些处理请求的类的,怎么办? 在java里有一 ...
- 好客租房33-事件绑定this指向(总结)
1推荐使用class的实例方法 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 // 约 ...
- 好客租房21-react组件的两种创建方式(函数组件)
1使用函数创建组件 函数组件:使用js的函数或者箭头函数创建的组件 约定1:函数组件名称必须以 开头 约定2:函数组件必须有返回值 表示该组件的结构 如果返回值为null 表示不渲染任何内容 2.1使 ...
- C/C++ 单元自动化测试解决方案实践
vivo 互联网服务器团队 - Li Qingxin C/C++ 开发效率一直被业内开发人员诟病,单元测试开发效率也是如此,以至于开发人员不愿花时间来写单元测试.那么我们是不是可以通过改善编写单元测试 ...
- SQL年龄计算方法
第一种方法: 用DATEDIFF函数,DATEDIFF(YEAR,beginDate,endDate). 测试语句: 1 DECLARE @birthdayDate DATE 2 DECLARE @e ...