Android通过两种模式来支持各种USB外设和Android USB配件
Android通过两种模式来支持各种USB外设和Android USB配件(指那些符合Android附件协议的硬件):USB配件和USB主机。在USB配件的模式之下,外部的USB配件就像USB主机那样。这种配件可以包括机器人控制器,连接器,医疗和音乐设备,电话亭以及读卡器这样很多的设备。这样就使得那些搭载Android系统的设备不需要具备主机的特性就可以和USB硬件进行交互。Android USB配件是指那些专门用来为搭载Android系统的设备工作以及符合Android附件通信协议的设备。在USB主机的模式之下,搭载Android的设备就像主机那样工作。这些设备包括数码相机,键盘,鼠标以及游戏控制器。Android USB设备被设计成具有广泛的应用领域,可以很好的完成人机互动应用的通信设备。
图1就显示了这两种模式的区别。当搭载Android系统的设备处于主机的模式下,它就充当USB主机并且为总线提供能源。而当搭载Android系统的设备处于USB配件的模式下时,连接的USB硬件(这种情况下,指的是一个Android USB配件)作为主机一样并且为总线提供能源。
在Android3.1(API12级)或较新的平台直接支持USB配件和主机模式。USB配件模式以一个附加的类库的方式支持范围更广的设备被移植到Android 2.3.4(API10级)。设备生产商可以决定是否在系统镜像上附加这个类库。
注意:支持USB主机和配件模式主要取决于设备的硬件,而不是平台的等级。你可以通过一个[[<uses-feature>]]元素来为设备进行过滤以支持USB主机和配件。看这个USB配件主机文档来了解更多的详情。
调试注意事项
当用USB主机或者配件调试应用程序时,你最好有连接到搭载Android程序的设备的USB硬件。这样可以避免你要通过USB来为搭载Android的设备建立一个adb的连接。你可以在一个网络连接中一直连着adb。确保adb在一个网络连接的方式:
1.通过USB连接搭载Android系统的设备和你的电脑
2.在命令提示符中到你的SDK platform_tools/ 目录,输入adbtcpip 5555
3.输入adb connect <device-ip-address>: 5555 你应该已经连接到了搭载Android程序的设备并且能够发出像adblogcat这样一般的adb命令
4.在USB上为你的设备设置一个监听,输入adbusb
USB配件
USB配件模式允许用户连接那些专门搭载Android设备的USB主机硬件。这些配件必须遵守Android配件开发工具包文档中所列出的Android附件协议。这使得搭载Android系统的设备在不充当USB主机的情况之下,仍然可以和USB硬件进行交互。当一台搭载Android系统的设备处于USB配件模式时,所依附的Android USB配件作为主机为USB总线提供能源以及列举出相连的设备。Android3.1(API12级)提供了USB配件模式并且这一特点也继承了Android2.3.4(API10级)以此来支持更多设备。
选择正确的USB附件APIs
尽管USB附件API在Android3.1平台才开始介绍,但是也可以在Android2.3.4API中通过附加类库使用。因为这些APIs都是通过额外的类库来使用的,你可以导入两个包来支持USB配件模式。取决于你想支持什么样的搭载Android系统的设备,你也许不得不在一个的基础上使用另外一个:
com.android.feature.usb:为了支持Android2.3.4的USB配件模式,Google APIs附加类库
括了USB外设APIs并且它们就是包含在这个命名空间的后面。Android3.1还支持导入和调用这个命名空间的类来支持附加类库编写的应用程序。这个附加的类库只是关于android.hardware.usb外设APIs的一个简单的封装并且它不支持USB主机模式。如果你希望更大范围支持USB配件模式的设备,使用附加类库并且导入改包就行。需要注意的是,并不是所有搭载Android2.3.4的设备都需要拥有USB外设这一特。每个设备生产商在决定是否具有这个特,这也就是为什么你必须要在manifest文件中声明的原因了。
android.hardware.usb:这个命名空间包含在Android3.1版本中支持USB附件模式的类。因为这个包是框架APIs中的一部分,所以Android3.1版本可以在不用附加类库的前提之下支持USB附件模式。使用这个包时,如果你只关心Android3.1或者更新的支持USB附件模式的硬件的设备,你可以在mainfest文件中进行声明。
安装谷歌APIs的附加类库
如果你想安装这个附加类库,你可以通过在SDK管理器上面安装谷歌APIs中的Android API10包的方式来做。更多关于安装附加类库的信息请参见安装谷歌APIs附加元件
API 概述
因为附加类库是一个框架APIs的封装,和那些支持USB附件功能的类是相似的。即使你在用附加类库的时候,你也可以用android.hardware.usb参考文档作为参考。
注意:然而,你要注意在附加类库和框架APIs之间还是有一些细微的使用差别的。
下面的表格为您描述了那些支持USB外设APIs的类:
龙之谷转职任务详细描述
UsbManager
允许您用已连接的USB配件直接进行枚举和交流
UsbAccessory
可以表示一个USB配件并且包含来连接识别信息的方法
男孩子草男孩子
关于平台APIs和附加类库之间的用法差异
在分别使用谷歌APIs附加类库和平台APIs的时候,通常会有两种差异。
如果您正在使用附加类库,则肯定会通过下列方式来创建UsbManager对象:
UsbManager manager = Instance(this);
如果您不是用的附加类,则必须通过下列方式来创建UsbManager对象:
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
当您通过一个意图过滤器来过滤一个已经连接的配件,那么这个UsbAccessory对象就必须包含在传给您应用的这个意图中。如果您正在使用附加类库,您就必须通过下列方式来声明UsbAccessory对象:
UsbAccessory accessory = Accessory(intent);
支付宝基金怎么取出来
如果您不是用的附加类,则必须通过下列方式来声明UsbAccessory对象:
UsbAccessory accessory = (UsbAccessory) ParcelableExtra(UsbManager.EXTRA_ACCESSORY);
Android ManiFest需求
下面的列表向您描述了在用USB配件APIs工作前需要在您应用中的manifest文件里面添加什么。下面的清单和资源文件例子将教您如何声明这些项:
因为并不是所有搭载Android系统的设备都保证支持USB配件APIs,包括一个<uses-feature>元素来声明您的应用具有
android.hardware.usb.accessory这个特。
如果你正在使用附加类库,添加<uses-library>这个元素用来为类库特定说明com.android.future.usb.accessory
如果您使用附加类库,那么您所设置的最低SDK版本是10级;如果您使用android.harware.usb冬奥会奖牌榜排名2022这个类的话,您所设置最低版本的SDK就应该为12级。
如果您希望您的应用带有一个附加USB配件的通知,在您的主activity中为android.hardware.usb.action.USB_ACCESSORY_ATTACHED这个意图指定一对<intent-filter><meta-data>元素。这个<meta-data>元素指向一个额外的声明关于你希望探测到的配件的识别信息的XML资源文件。
   在这个XML资源文件中,为您希望过滤的配件声明<usb-accessory>静音模式元素。每一个<usb-accessory>都有下面的属性:
制造商
模式
版本
res/xml/这个目录下保存资源文件。这个资源文件的名字(没有 .xml的拓展名)必须和你在<meta-data>元素指定的一样。这个XML资源文件的格式在下面的例子中给出。
清单和资源文件例子
下面的例子就为您展示了一个简单的manifest以及与之相关的资源文件:
 
<manifest ...>preciousprotection
<uses-featureandroid:name="android.hardware.usb.accessory"/>
 
<uses-sdkandroid:minSdkVersion="<version>" />
    ...
<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>
</manifest>
在这种情况之下,下面的资源文件保存在res/xml/l文件中,并且指定那些只有与其相关的模式,制造商和版本的配件能够被选择。这个配件把这些属性传递给搭
载Android系统的设备:
 
<?xmlversion="1.0"encoding="utf-8"?>
 
<resources>
<usb-accessorymodel="DemoKit"manufacturer="Google"version="1.0"/>
</resources>
 
用配件工作
当用户将USB配件连接到搭载Android系统的设备上面时,Android系统会判断您的应用是
否适用于已连接的该配件。如果适用,您就可以根据您的喜好为该设备建立连接。要这么做,您的应用必须做下面这些动作:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。