赞
踩
摘自:USB 主机和配件概览 | Connectivity | Android Developers (google.cn)
Android 通过 USB 配件和 USB 主机两种模式支持各种 USB 外围设备和 Android USB 配件(实现 Android 配件协议的硬件)。
在 USB 主机模式下,Android 设备充当主机。设备示例包括数码相机、键盘、鼠标和游戏控制器。当 Android 设备处于主机模式时,它会充当 USB 主机并为总线供电。
Android 3.1(API 级别 12)或更高版本的平台直接支持 USB 配件和主机模式。USB 配件模式还作为插件库向后移植到 Android 2.3.4(API 级别 10),以支持更广泛的设备。设备制造商可以选择是否在设备的系统映像中包含插件库。
注意:对 USB 主机和配件模式的支持最终取决于设备的硬件,而与平台级别无关。您可以通过 <uses-feature> 元素过滤出支持 USB 主机和配件的设备。如需了解详情,请参阅 USB 配件和主机文档。
官网使用说明:
USB 主机概览 | Connectivity | Android Developers (google.cn)
其实官网写的很清楚了,但是有些东西还是要实践后才能真正清楚。
添加特征
<uses-feature android:name="android.hardware.usb.host" android:required="true" />
如果需要程序在USB 插入或拔出做些处理,还需要配置一下:
- <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" />
其中res/xml/device_filter.xml如下(供应商id值和产品id值都是厂家提供的):
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <usb-device vendor-id="1061" product-id="33113"/>
- </resources>
整合起来 AndroidManifest.xml 为:
- <manifest ...>
- <uses-feature android:name="android.hardware.usb.host" />
- <uses-sdk android:minSdkVersion="12" />
- ...
- <application>
- <activity ...>
- ...
- <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" />
- </activity>
- </application>
- </manifest>
通过枚举的方式查找设备:
- for (UsbDevice device : mUsbManager.getDeviceList().values())
- {
- if( device.getVendorId() == 1061 && device.getProductId() == 33113 )
- {
- }
- }
如果没有USB权限,需要动态请求:
- private static final String ACTION_USB_PERMISSION = "com.example.test.USB_PERMISSION";
-
- IntentFilter filter = new IntentFilter();
- filter.addAction(ACTION_USB_PERMISSION);
- registerReceiver(mUsbReceiver, filter);
-
- //权限结果处理
- private BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (ACTION_USB_PERMISSION.equals(action)) {
- synchronized (this)
- {
- UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
- if(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,false))
- {//用户授予权限
- ...
- }
- else
- {//用户拒绝了
- ...
- }
- }
- }
- }
- };
-
- //请求权限
- if(!mUsbManager.hasPermission(device))
- {
-
- Intent intent = new Intent(ACTION_USB_PERMISSION);
- PendingIntent mPermissionIntent = PendingIntent.getBroadcast(
- this, 0, intent, 0);
- mUsbManager.requestPermission(device, mPermissionIntent);
- }
如果需要接收USB插、拔的通知,在清单配置完成后,添加监听。
- IntentFilter filter = new IntentFilter();
- ...
- //添加插拔的监听
- filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
- filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
- registerReceiver(mUsbReceiver, filter);
-
- //处理
- private BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (ACTION_USB_PERMISSION.equals(action))
- {
- ...
- }
- else if(UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action))
- {//插入
- ...
- }
- else if(UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action))
- {//拔出
- ...
- }
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。