Android USB Host开发笔记

本文介绍了Android TV端USB Host开发的过程,包括如何检查设备是否支持USB Host,配置权限,编写工程Demo,以及数据接收的方法。重点讲解了Android系统的USB管理器、设备过滤器和数据交换的相关类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做有关Android TV端使用USB外设进行用户交互方面的开发。总结一下开发过程中的困惑、解决方案以及开发的整个过程:

一、做USB Host开发前的准备工作:
1. “工欲善其事必先利其器”,先简单了解一下USB Host:
1> USB Device:从硬件角度看就是一个带有USB Client控制器的设备;从软件角度看,就是一个挂在USB总线上的一个普通意义上的设备,只不过它们的驱动是基于Host驱动之上的。
2> USB Host:USB主设备,可以从另外一个USB Device中取得数据,包括USB Host控制器和USB Host协议。与USB Client设备和USB Slave协议相对应。
3> USB Client:从硬件角度看就是指USB Device,从软件角度看,就是指USB Client协议。
4> USB OTG:On The Go,正在进行中的意思,也就是可以直接传输,就是可以从一个机器直接传到另一个机器中。
5> USB HUB:USB扩展/集线器,一种可以将一个USB接口扩展为多个(通常为4个),并可以使这些接口同时使用的装置。

我总结一下:Android TV上提供USB插口,Android TV是USB Host(包含协议,是主设备),插在插口上的USB Device为USB Client。如果一个插口上插了个USB分线器,这个是USB HUB。USB Client与USB Host之间进行数据交换叫做OTG。
2. Check your device surpport USB Host or not.
怎么检查呢?
1> 使用ES或RE文件浏览器,进入 /system/etc/permissions 目录下,查看是否有 android.hardware.usb.host.xml 文件。
2> 若有那么OK。没有的话自己创建一个同名的文件,在文件中写入:

     <permissions>
            <feature name="android.hardware.usb.host />
     </permissions>

3> 最好检查一下: /system/etc/permissions 目录下
手机:handheld_core_hardware.xml
平板/TV:tablelet_core_hardware.xml
文件中的< permissions >< /permissions >节点下是否第2>点中的那句话,没有的话可以考虑加一下。(Google官方说不加且有第1>点中的文件是没问题的。)

二、USB Host 的Android工程Demo编写

  1. 新建一个Android 工程,在清单配置文件中设置应用的USB Host权限(注意:此处是应用的权限,之前第一点是设备的硬件支持)
<uses-feature
        android:name="android.hardware.usb.host"
        android:required="true" />

<uses-permission android:name="android.hardware.usb.host" />
<uses-permission android:name="android.hardware.usb.accessory" />

另外,需要在< application>的某个< activity>节点中添加意图过滤(Intent-Fliter)、中继数据(meta-data),具体如下:

<intent-filter>
    <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>

<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
            android:resource="@xml/device_filter" />

注意:此处是重点:
1) 意图过滤表示的是 硬件USB设备依附的动作意图;
2) 中继数据表示的是 关联res/xml文件夹下的device_filter.xml文件,因此需要在对应的目录下创建这个文件,并且在此文件中编写代码(表示的是你的应用要获取的指定的USB设备的数据),我的是这样的:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <usb-device vendor-id="11021" product-id="257" />
    <usb-device vendor-id="11020" product-id="513" />
</resources>

这里的vendor_id也好、 product_id也好,一定要写你自己需要获取数据的设备的id。

2.Java代码部分。
1) 需要知道的几个类:UsbManager、UsbDevice、UsbInterface、UsbDeviceConnection、UsbEndPoint这几个类。

大概介绍一下(想详细了解可以参考AndroidDevelopers官方网站):
UsbManager:USB管理器,是获得USB设备,进行数据交换的最基本的类。
UsbDevice:表示USB设备的一个类。
UsbDeviceConnection:表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值