跟附件一起工作
当用户把USB附件连接到Android设备时,Android系统能够判断你的应用程序是否对接入的附件感兴趣。如果感兴趣,你能够跟期望的附件建立通信。以下是你的应用程序要做的事情:
1. 通过使用过滤附件设备接入事件的Intent过滤器或列举已经接入的附件设备来发现对应的附件设备;
2. 如果不是已知的附件设备,就要询问用户是否允许跟该附件设备通信;
3. 通过读写对应接口端点上的数据来跟附件设备通信。
发现附件设备
你的应用程序既可以通过用户接入附件设备时的Intent通知,也可以通过列举已经接入的附件设备来发现你想要的附件设备。如果你想要你的应用能够自动检测到期望的附件设备,那么使用Intent过滤器是有用的。如果你想要获取所有已连接的附件设备列表,或者你的应用程序并不过滤特定的Intent,那么使用列举的方法是有用的。
使用Intent过滤器
你可以指定一个android.hardware.usb.action.USB_ACCESSORY_ATTACHED类型的Intent过滤器,以便你的应用程序能够发现特殊的USB附件设备。跟这个Intent过滤器一起,你还需要指定一个包含USB附件设备属性的资源文件,这些属性包括:制造商、模式、版本。
下例显示了如何声明一个Intent过滤器:
<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>
下例是对应的资源文件的声明:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-accessory manufacturer="Google, Inc." model="DemoKit" version="1.0" />
</resources>
在你的Activity中,你能够从Intent对象中获得代表接入的附件设备的UsbAccessory对象.
使用add-on类库的情况:
UsbAccessory accessory =UsbManager.getAccessory(intent);
使用平台API的情况:
UsbAccessory accessory =(UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
列举附件设备
在应用程序运行时,你能够让你的应用程序列举出已经识别出的所有附件设备。
使用getAccessoryList()方法来获取所有已连接的USB附件设备:
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
UsbAccessory[] accessoryList = manager.getAcccessoryList();
注意:当前,一次只支持连接一个附件设备,但是在未来,该API被设计成要支持多个附件设备。