Android USB通信

Android USB通信

  • Author: 迷你小猪
  • Date: 2020-09-07
  • Email: Benjie1017@outlook.com

知识简介:

  1. Android 通过 USB 配件和 USB 主机两种模式支持各种 USB 外围设备和 Android USB 配件(实现 Android 配件协议的硬件)。

    • USB 配件模式下,外部 USB 硬件充当 USB 主机,配件包括机器人控制器、扩展坞、音乐设备、自助服务终端、读卡器等。不具备主机功能的 Android 设备就能够与 USB 硬件互动。Android USB 配件必须设计为与 Android 设备兼容,并且必须遵守 Android 配件通信协议。

    • USB 主机模式下,Android 设备充当主机,设备包括数码相机、键盘、鼠标和游戏控制器等。针对各类应用和环境设计的 USB 设备仍可与能够与设备正常通信的 Android 应用互动。

  2. 下图展示了这两种模式之间的差异。

    • Android 设备处于主机模式时,它会充当 USB 主机并为总线供电。

    • Android 设备处于 USB 配件模式时,所连接的 USB 硬件(本例中为 Android USB 配件)充当主机并为总线供电。
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OuBVIJUv-1605706806773)(https://developer.android.com/images/usb-host-accessory.png)]

  3. Android 3.1(API 级别 12)或更高版本的平台直接支持 USB 配件和主机模式。USB 配件模式还作为插件库向后移植到 Android 2.3.4(API 级别 10)中,以支持更广泛的设备。设备制造商可以选择是否在设备的系统映像中添加该插件库。


USB通信模式简称:

  1. Accessory Mode: 配件模式,以下简称 AM

  2. Host Mode: 主机模式,以下简称 HM

  3. USB 设备管理器:

    • Android 2.3.4 版本:

      UsbManager manager = UsbManager.getInstance(this);
      
    • Android 3.1 版本:

      UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
      

USB AM介绍:

获取指定的配件设备:

  1. 获取已连接的配件(通过清单文件结合IntentFilter获取):

    • Android 2.3.4 版本:

      UsbAccessory accessory = UsbManager.getAccessory(intent);
      
    • Android 3.1 版本:

      UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
      
  2. 配置 AndroidManifest.xml

    • Android 2.3.4 版本:

      • 添加 <uses-feature> 元素来声明您的应用使用 com.android.future.usb.accessory 功能

        <uses-feature android:name="com.android.future.usb.accessory" android:required="true"/>
        <uses-sdk android:minSdkVersion="10" />
        
    • Android 3.1 版本:

      • 添加 <uses-feature> 元素来声明您的应用使用 android.hardware.usb.accessory 功能

        <uses-feature android:name="android.hardware.usb.accessory" android:required="true"/>
        <uses-sdk android:minSdkVersion="12" />
        
  3. 如果需要动态监听 USB 配件的连接或断开,需要在 Activity 的标签中制定 <intent-filter><meta-data> 元素。其中,<meta-data> 元素指向一个外部 XML 资源文件,该文件位于 res/xml/ 路径下,声明了关于要检测的配件的识别信息。该 XML 资源文件中,为要过滤的配件声明 <usb-accessory> 元素。每个 <usb-accessory> 可以包含属性:manufacturer、model 、version

    • activity 标签配置示例:

      <application>
      	<uses-library android:name="com.android.future.usb.accessory" />
      	<activity ...>
      		...
      		<intent-filter>
          		<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
      		</intent-filter>
      
      		<meta-data 
      			android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
          		android:resource="@xml/accessory_filter" />
      	</activity>
      </application>
      
    • 型号、制造商、版本信息的 xml 文件如:

      <?xml version="1.0" encoding="utf-8"?>
      <resources>
      	<usb-accessory model="DemoKit" manufacturer="Google" version="1.0"/>
      </resources>
      

获取设备列表:

  • 获取已连接的所有 USB 配件的列表

    UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
    UsbAccessory[] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值