Android中的USB中的UsbAccessory和UsbDevice的区别

【背景】

之前折腾android中的USB相关的东西。

遇到两个东西:

UsbAccessory和UsbDevice

但是,不是完全明白其中区别。

所以去找找区别。

【解决过程】

1.看了:

android.hardware.usb | Android Developers

的解释,有点概念了:

UsbAccessory:一种外部硬件模块,该硬件模块,和Android设备通过USB进行通讯

UsbDevice:首先是要Android作为Host,然后外部连接一个USB的Device设备。

2.又看到:

USB  Hardware features

中的:

USB android.hardware.usb.host The application uses USB host mode features (behaves as the host and connects to USB devices).  
android.hardware.usb.accessory The application uses USB accessory features (behaves as the USB device and connects to USB hosts).

感觉清楚了,但是还是很疑惑:

usb.host:很明显,Android设备是Host。外接的是Device。

usb.accessory:Android设备是Device,外挂到USB的Host端,比如PC。

但是还是对于UsbAccessory和UsbDevice,两者的区别,不是很清楚。

因为:

不论是Accessory还是Device,在相对于Host来说,都是Device的概念。

3.看到:

A Bright Idea: Android Open Accessories

提到了:

Android’s USB port has in the past been curiously inaccessible to programmers. Last week at Google I/O we announced the Android Open Accessory APIs for Android. These APIs allow USB accessories to connect to Android devices running Android 3.1 or Android 2.3.4 without special licensing or fees. The new “accessory mode” does not require the Android device to support USB Host mode.

很明显,最重要的一点是:

USB Accessory,是,相对于USB的Host和USB的Device之外的,独立的概念。

其允许:

即使Android设备不支持USB Host,也可以使用USB Accessory。

具体的细节是:

先说正常情况:

比如USB键盘,那么:

之前都是PC端,作为USB的Host,USB键盘插到PC上,USB键盘是USB的Device;

而如今:

对于Android,考虑到,太多的Android的设备(平板,手机)等,不支持USB的Host,在此情况下,仍希望可以外接USB设备

所以:

Android的设计中,就加入了个Accessory,

其把之前的USB的Host和Device互换了:

Android设备是USB的Device;

插入到Android设备上的USB键盘,却作为USB的Host;

此时,Android设备,对于外挂的USB的设备来说,概念上,就是所谓的附件Accessory了。

但是此处:

由于外接的USB设备,作为USB的Host,所以其要负责:

给Android设备供电,负责USB的Host的其他事情(管理USB的bus总线)

所以:

我此处给的例子,把USB键盘直接挂到Android设备中,应该是不恰当的了。

估计只有其他的,USB接口的,查到Android设备中,可以给Android设备供电(而不是Android设备给USB设备供电)

才可以的。

【总结】

至此,基本算是明白了:

UsbAccessory和UsbDevice的区别

  • UsbDevice:正常的,USB的Host和USB的Device架构中的USB的Device

    • 所以,此时:Android设备是USB的Host,外接的USB设备是USB的Device

      • 此时,Android设备作为USB的Host,要做USB Host该干的事情:

        • 给USB外接设备供电
        • 负责管理USB总线
  • UsbAccessory:和标准的USB的概念相反
    • USB设备是USB的Host

      • 所以,此时USB设备,也要干其作为USB的Host的事情

        • USB设备,要给作为USB的Device的Android设备供电
        • USB设备要负责管理USB总线
    • 而Android设备是USB的Device
      • 此时,从概念上说,相当于把Android设备,当做Accessory附件,挂在USB设备上

Android中的USB中的UsbAccessory和UsbDevice的区别相关推荐

  1. UsbAccessory和UsbDevice的区别

    UsbAccessory和UsbDevice的区别 UsbDevice:正常的,USB的Host和USB的Device架构中的USB的Device 所以,此时:Android设备是USB的Host,外 ...

  2. 如何在没有 USB 数据线的情况下使用 Android Studio 在手机中安装 Android

    背景 如何在没有 USB 数据线的情况下使用 Android Studio 在手机中安装 Android 应用程序? 运行调式一个Android项目,写下必要的代码后,接下来的任务是在模拟器或手机上运 ...

  3. Android/C/C++ 中解决 USB UnMount(禁止USB端口)

    引:因为某些特殊需求,需要在某些设备接入车机的时候,动态UnMount USB设备,因为代码其中有一些方法是自定义过的,所以该文章仅供思路参考. (20200319 更新):在后续跟进中,发现如果卸载 ...

  4. Android源码中修改USB默认模式(充电、MTP等)、关闭通知栏的USB通知

    写了几年Android App,公司领导突然叫我在源码中修改USB连接后不能从PC端传数据到设备,这个之前没怎么接触过源码,咱也不知道,咱也不敢问呢,然后百度一搜,多倒是多,直接贴一大篇源码,得了吧, ...

  5. 安卓开发中的USB转串口通讯

    安卓开发中的USB转串口通讯 本文使用GitHub上开源的"hoho.android.usbserial"USB串口库.该库基于"Android USB Host API ...

  6. Android studio安装过程中入的坑的记录与记录

    Android studio安装过程中入的坑的记录与记录 * 由于最近项目的需求,所以最近一直在配置安卓的开发环境,之前用的是Eclipse + ADT的模式开发的,配置环境也花了一些时间,但是由于谷 ...

  7. USB 中MTP和UMS 模式

    MTP的全称是Media Transfer Protocol(媒体传输协议),它是微软公司提出的一套媒体文件传输协议. UMS(USB Mass Storage:大容量存储)是一个计算通信协议的设置 ...

  8. 使用MediaPlayer播放USB中读取到的MP3音乐文件,遇到java.io.FileNotFoundException异常总结

    项目背景: 多媒体USB音乐,底层调用MediaPlayer来播放U盘中读取的歌曲,由于最初版本将一首MP3歌曲甜蜜蜜写到了AS的raw目录,直接本地播放,做了一首假数据: 即: //临时代码,写死歌 ...

  9. Vuforia用在安卓设备中外接USB摄像头(一)

    一.介绍 众所周知,vuforia可以用在安卓设备上使用AR,但是开启的都是设备的前置或后置的摄像头,在需要外接USB摄像头这块,vuforia没有给出直接的调用模块,但是官网给出了一个制作调用USB ...

最新文章

  1. 配置red hat的ip 自动地址
  2. Nuget很慢,我们该怎么办
  3. 【深度学习】softmax后处理和弹性形变前处理
  4. MYSQL密码解密函数的使用
  5. 【Go】从键盘输入字符串和数字
  6. php解析api xml并输出到html页面,怎样操作JS读取xml内容并输出到div内
  7. 阿旺wifi智能系统源码
  8. 《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
  9. cocos2dx视频教程进阶篇--第2天--打砖块游戏-box2d物理引擎--续
  10. train_test_split按比例划分
  11. Lenovo Quick Fix 联想智能解决工具
  12. saltstack的探索-利用脚本增加用户
  13. ASCII、GB2312、GBK、GB18030、Unicode、UTF-8、BIG5 编码分析
  14. Java工程师的职业规划,上个月成功拿到阿里P7offer
  15. 分类评价指标(二分类)——f1score sensitivity specificity roc曲线 auc
  16. 硬盘主分区和逻辑驱动器的区别
  17. 如何通过JavaScript获取搜索引擎搜索关键词
  18. MR案例(1)词频统计
  19. 苹果系统Fn键怎样使用?
  20. Tomcat配置完成后打不开localhost网页解决方法

热门文章

  1. 杭电--N!(大数)
  2. 【原】执行nosetests 报错:pkg_resources.DistributionNotFound: nose==0.10.4
  3. 使用Unity开发项目的一点经验
  4. Abstract class 与Interface 抽象类和接口
  5. php定时任务引入文件,php解决crontab定时任务不能写入文件问题的方法分析
  6. elk 概念整理 集群状态 - yellow
  7. 第二十节,使用RNN网络拟合回声信号序列
  8. ETL增量单表同步简述_根据dateTime增量
  9. 移动端日期控件 mobiscroll
  10. 重启VirtualBox里面的系统提示VT-x features locked or unavailable in MSR错误