安卓USB开发——搭建手机与物联网设备相会鹊桥


【持续更编中】

一、前言

        ~~~~~~~ 近期,开发一款智能家居产品——带屏智能音箱,需要USB连接物联网设备。物联网设备,获取家居环境数据,通过USB通信传递给智屏,智屏将家居环境数据,显示在屏幕上。
        ~~~~~~~ 文章稍长,适合较全理解安卓USB程序开发。如有不适,请通过目录,直接跳转到实战部分。感谢阅读,祝收获满满。

二、简析USB

        ~~~~~~~ 如文名,涉及三个概念:

  1. USB :Universal Serial Bus,通用串行总线
  2. 安卓设备:运行着安卓操作系统的设备
  3. USB设备:具有USB接口及实现了USB协议的设备

        ~~~~~~~ 虽然本片文章主要讲解站在安卓应用层对USB的开发,但简单了解USB,而不只是分析安卓SDK相关USB的API,个人认为对我们的安卓开发会起到很大的帮助。
        ~~~~~~~ 如果您对USB比较了解,可以通过目录直接跳转到安卓开发部分。

1.外部总线标准

        ~~~~~~~ USB,即Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准。
        ~~~~~~~ USB采用四线电缆,其中两根是用来传送数据的串行通道,另两根为设备提供电源。
在这里插入图片描述
        ~~~~~~~ 对于任何已经成功连接且相互识别的外设,将以双方设备均能够支持的最高速率传输数据。USB总线会根据外设情况在所兼容的传输模式中自动地由高速向低速动态转换且匹配锁定在合适的速率(虽然如此,最好确定好安卓设备和USB硬件外围设备,都支持的某个波特率)。

2.主从结构星型拓扑

        ~~~~~~~ USB是一种主从结构的系统。包含主机和从机(功能设备),两种角色。
        ~~~~~~~ 所有的USB传输,都是从USB主机这方发起;USB设备没有"主动"通知USB主机的能力。例子:USB键盘,按下键,立刻产生数据,键盘核心板没有能力通知PC机来读数据,只能被动地等得PC机来读取数据。在这里插入图片描述
        ~~~~~~~ USB系统采用级联星型拓扑,该拓扑由三个基本部分组成:主机(Host),集线器(Hub)和功能设备。
在这里插入图片描述
在这里插入图片描述

3.自、总供电模式

在这里插入图片描述

4.OTG

        ~~~~~~~ 一旦离开了PC,各设备间无法利用USB口进行操作,因为没有一个设备能够像PC一样充当主机。On-The-Go,即OTG技术就是实现在没有Host的情况下,实现从设备间的数据传送,主要应用于各种不同的设备或移动设备间的联接,进行数据交换。
        ~~~~~~~ 通过OTG技术,可以给智能终端扩展USB接口配件以丰富智能终端的功能:为设备供电(安卓设备当于充电宝)、文件互传、扩展手机内存、连接外部设备等。

OTG线
在这里插入图片描述

  • 文件互传、扩展内存
    在这里插入图片描述
  • 连接外部设备
    在这里插入图片描述

5.小结

        ~~~~~~~ 作为安卓应用层开发者,我们无需对上述概念完完全全掌握。但请务必了解下面几点:

  • USB是一种设备间的通信标准,设备间需协商以某波特率,作为双方通信速率
  • USB是主从结构,可通过Hub做级联星型拓扑
  • USB主机设备可对从设备执行读写操作,从设备产生数据只能被动等待主设备来读取,无法主动通知主设备来读取
  • USB从设备和Hub,可自供电源或从主线上获取电源
  • 需拥有一根OTG线,和外部设备连接

        ~~~~~~~ 了解了基本的USB知识后,咱们一起开始探究安卓USB开发吧。

三、安卓USB开发探究

1.从谷歌官方资料入手

        ~~~~~~~ 如果能静下心,把官方的文档吃透,再加上实践,就可以较好的掌握安卓USB开发。
        ~~~~~~~ 本节内容,为官网截图加分析,每小节均附了官网地址传送门。有时间和耐心的读者,可以自行看完官网介绍,再回来看总结。时间局限的读者,可以直接阅读本文总结。

(1)引子

        ~~~~~~~ 在AS中敲代码,输入Usb,立马提示Android SDK的相关API。总共有九个。
在这里插入图片描述
想要了解这些类该怎么使用,和安卓与USB设备之间的风流韵事。咱们先去谷歌瞧瞧,走起。

(2)简介

传送门
在这里插入图片描述

android.hardware.usb:为驱动了USB硬件外围设备的安卓系统设备,提供与USB硬件外围设备的通信支持。

  • 使用UsbManager访问USB的状态,并与连接的硬件外围设备通信。
  • 如果安卓系统设备充当USB主机,则使用UsbDevice与硬件外设通信。
  • 如果外设充当USB主机,则使用UsbAccessory。

安卓USB主机与从机API

说明
UsbAccessory 表示一个 USB 配件,并包含访问其标识信息的方法
UsbConfiguration USBDevice类的USB配置类
UsbConstants 定义与 Linux 内核的 linux/usb/ch9.h 中的定义相对应的 USB 常量
UsbDevice 表示连接的 USB 设备,并包含用于访问其标识信息、接口和端点的方法
UsbDeviceConnection 表示与设备的连接,可在端点上传输数据。借助此类,您能够以同步或异步方式反复发送数据
UsbEndpoint 表示接口端点,是此接口的通信通道。一个接口可以具有一个或多个端点,并且通常具有用于与设备进行双向通信的输入和输出端点
UsbInterface 表示 USB 设备的接口,它定义设备的一组功能。设备可以具有一个或多个用于通信的接口
UsbManager 您可以枚举连接的 USB 设备并与之通信
UsbRequest 表示通过 UsbDeviceConnection 与设备通信的异步请求

(2)与外部设备交互模式

传送门

在这里插入图片描述在这里插入图片描述
        ~~~~~~~ 两种模式,安卓设备作为主机模式;安卓设备作为从机模式。
        ~~~~~~~ 当连接的外部设备占用了手机唯一的USB口后,可以通过WiFi ADB的方式(稍后实战部分会具体讲解),为手机烧录程序和进行其它相关操作。

(3)安卓设备作为主机

传送门
待更新

(4)安卓设备作为从机

传送门
待更新

2. 总结

待更新

四、安卓USB开发实战

待更新

五、鸣谢

  • 本篇文章,部分图片资源来自百度图片和百度百科;部分图片资源来自书籍《计算机USB系统原理及其主/从机设计》;部分图片资源来源于谷歌官方网站;部分图片来源于其它网络资源。在此,对资源主表示衷心的感谢。如果,认为部分资源,不适合或不应该出现在本篇文章,博主深表抱歉,请及时与博主联系协商。
  • 感谢各位的阅读,博主各方面知识有限,难免出现偏误,如果您不吝指正,请在评论区留言。祝大家编程愉悦,快乐编程,头发永茂!
发布了5 篇原创文章 · 获赞 0 · 访问量 2664

猜你喜欢

转载自blog.csdn.net/dj2017/article/details/105760821