在 Android 开发中配置 USB 配件模式(Accessory Mode) 的配件过滤器(accessory_filter.xml
),需要以下步骤:
1. 创建配件过滤器文件
在项目的 res/xml/
目录下创建 accessory_filter.xml
文件(若无 xml
目录请先创建)。
2. 配置 XML 内容
在文件中声明支持的 USB 配件参数,常用属性包括:
-
manufacturer
:配件制造商名称 -
model
:配件型号 -
version
:固件版本号
示例代码:
XML
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 匹配特定制造商和型号的配件 -->
<usb-accessory
manufacturer="Acme Inc"
model="Controller 3000"
version="1.0" />
<!-- 匹配所有型号的配件(仅指定制造商) -->
<usb-accessory
manufacturer="TechGadgets" />
<!-- 匹配任意配件(不指定任何属性) -->
<usb-accessory />
</resources>
3. 在 AndroidManifest.xml 中注册
在需要响应 USB 配件的 Activity 中声明:
XML
<activity android:name=".USBAccessoryActivity">
<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>
4. 添加 USB 权限
在 AndroidManifest.xml
中添加权限:
XML
<uses-permission android:name="android.permission.USB_PERMISSION" />
<uses-feature android:name="android.hardware.usb.accessory" />
5. 在代码中处理 USB 配件
在 Activity 中获取 USB 配件对象:
java
public class USBAccessoryActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (UsbManager.ACTION_USB_ACCESSORY_ATTACHED.equals(intent.getAction())) {
UsbAccessory accessory = intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
// 处理配件通信逻辑
}
}
}
关键配置说明:
属性 | 作用 | 是否必须 |
---|---|---|
manufacturer |
匹配配件制造商(字符串) | 可选 |
model |
匹配配件型号(字符串) | 可选 |
version |
匹配固件版本(字符串) | 可选 |
无属性 | 匹配所有 USB 配件(谨慎使用) | 可选 |
注意事项:
-
兼容性:确保设备支持 USB Host/配件模式(Android 3.1+)。
-
权限请求 :首次连接需动态申请权限(使用
UsbManager.requestPermission()
)。 -
多配件支持 :在 XML 中添加多个
<usb-accessory>
节点可匹配多个配件。 -
协议要求 :配件需实现 Android 配件协议。
完成配置后,当匹配的 USB 配件接入时,系统会提示用户启动你的应用,并传递配件对象进行通信。