简介:由于安卓连接 USB device 颇为繁琐,因此本着不重复造轮子的原则写了一个 UsbConnector 库。 运用该库三步即可轻松实现安卓连接 USB device, USB 状态监听及 USB 连接权限的处理的功能!
Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.Ysj001:UsbConnector:1.0.5'
}
- 在 res 目录下建立一个 xml 文件夹,并在其中建立一个 device_filter.xml 文件内容如下所示
- usb-device 可设置多个,用于过滤多个连接的设备
- product-id 和 vendor-id 为必须设置的参数,用于后面记住 usb 设备的连接权限
- interface-id 和 interface-subclass 则用于自动过滤用于打开连接的设备的连接接口(UsbInterface),若设置正确则库会自动初始化 UsbDeviceConnection
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<usb-device product-id="65535" vendor-id="2663" interface-id="3" interface-subclass="0" />
<usb-device product-id="0x01" vendor-id="0x02" interface-id="0x03" interface-subclass="0x00" />
<usb-device product-id="222" vendor-id="1212" interface-id="31" interface-subclass="1" />
</resources>
-
在任意位置都可调用 UsbConnector.register(context) 来对该库进行初始化,如下为在 Application 的 onCreate() 函数中初始化
-
在任意位置都可调用 UsbConnector.unregister(context) 来释放该库,如下为在 Application 的 onTerminate() 函数中释放
@Override
public void onCreate() {
super.onCreate();
UsbConnector.register(this);
}
@Override
public void onTerminate() {
super.onTerminate();
UsbConnector.unregister(this);
}
以上步骤完成后
- 在对 usb device 进行操作前要先初始化 UsbOperate
IUsbOperate mOperate = new UsbOperate();
- 是否插入
- 插入的设备是否是过滤文件中的设备
- 是否已经连接上
以上状态均可用以下方法监听:
mOperate.setOnDeviceStateListener(new OnDeviceStateListener() {
@Override
public void onDeviceState(String action) {
}
});
可在以下方法中监听:
mOperate.setOnDevicePermissionListener(new OnDevicePermissionListener() {
@Override
public void onDevicePermission(boolean hasPermission) {
}
});
- 在完成上述几个步骤后只需要如下步骤就可以连接 usb device 啦
mOperate.connected(this);
- 若想获取以下内容均可在 USBHolder. getInstance() 中
// 用于过滤设备的 filters
List<UsbFilter> filters = new ArrayList<>();
// usb 设备
UsbDevice usbDevice;
// 该设备的连接接口
UsbInterface usbInterface;
// 设备的连接
UsbDeviceConnection usbDeviceConnection;
// 输入端点
UsbEndpoint endpointIn;
// 输出端点
UsbEndpoint endpointOut;