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功能的更多相关文章

  1. 翻译Android USB HOST API

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

  2. Android Service创建USB HOST通信

    之前做了一个关于Android USB通信的Case,通过Android的USB总线给Zigbee供电,和板载的Zigbee(基于Zigbee的自组网)进行通信.要使用Android的USB Host ...

  3. 【转】Android Service创建USB HOST通信

    之前做了一个关于Android USB通信的Case,通过Android的USB总线给Zigbee供电,和板载的Zigbee(基于Zigbee的自组网)进行通信.要使用Android的USB Host ...

  4. 『翻译』Android USB Host

    USB Host When your Android-powered device is in USB host mode, it acts as the USB host, powers the b ...

  5. 【转】Android实战技巧之四十九:Usb通信之USB Host

    零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一. 硬件上,它是用插头连接.一边是公头(plug),一边是母头(receptacle).例如,PC上的插座就是母头 ...

  6. USB HOST与 USB OTG的区别及工作原理

    在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!!! 转自USB HOST与 ...

  7. Android 4.3正式发布:四大新功能一览

    在旧金山举行的新品发布会上,Google正式发布了Android 4.3,代号仍为“Jelly Bean”.此次更新并没有太大改变,只是紧跟4.1.4.2步伐, 新增了低功耗蓝牙.多用户登录等一系列功 ...

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

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

  9. Android USB Host框架

    Android 下的usb框架及功能点:https://blog.csdn.net/tianruxishui/article/details/379029591.Android framework中* ...

随机推荐

  1. Spring配置及依赖注入

    入门 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-we ...

  2. maven install resources failed: newPosition < 0: (-1 < 0)

    添加以下代码在 pom.xml 中,具体参阅这里 <build> <plugins> <plugin> <groupId>org.apache.mave ...

  3. 【多线程】可重入锁 ReentrantLock

    java除了使用关键字synchronized外,还可以使用ReentrantLock实现独占锁的功能.而且ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也 ...

  4. 89. Gray Code - LeetCode

    Question 89. Gray Code Solution 思路: n = 0 0 n = 1 0 1 n = 2 00 01 10 11 n = 3 000 001 010 011 100 10 ...

  5. 好客租房2-React概述

    1.1什么是react React是一个用于构建用户界面的javascript库 用户界面:HTML页面 React主要用来HTML 或者沟通构建web应用 如果从MVC的角度来看 react仅仅是从 ...

  6. Mac下最好用的SSH连接客户端 (Termius)

    Termius是微软的一款SSH终端工具,它支持多平台.而且操作界面十分ha好看且简洁,今天分享给大家️ 软件下载 关注下方公众号,回复termius获取下载地址   软件功能介绍 Termius M ...

  7. 前端向后端传递formData类型的二进制文件

    // 获取到的文件file类型转换为formData类型 let formData = new FormData(); formData.append("file", file文件 ...

  8. es的查询、排序查询、分页查询、布尔查询、查询结果过滤、高亮查询、聚合函数、python操作es

    今日内容概要 es的查询 Elasticsearch之排序查询 Elasticsearch之分页查询 Elasticsearch之布尔查询 Elasticsearch之查询结果过滤 Elasticse ...

  9. jeecgboot-vue3笔记(八)——treeSelect树形选择组件的使用(一次性加载)

    使用效果 前端代码 定义interface export interface TreeDataItem { value: string; key: string; title?: string; sl ...

  10. 利用Github Action实现Tornadofx/JavaFx打包

    原文地址: 利用Github Action实现Tornadofx/JavaFx打包 - Stars-One的杂货小窝 最近开了个新项目,主要是个工具软件,也算个人的自娱自乐吧,也算开源的一部分,想着都 ...