最近接了一个新需求,就是客户需要代码识别插入的u盘是2.0还是3.0的。 我在百度遨游了一天,嘿嘿,没找到。
后面经过我百般尝试,千锤百炼,github都翻烂了,编译都编累了,终于勉强找到了方法。这个方法仅适用于在主板上3.0的usb口才能识别出你的u盘是2.0的还是3.0的,如果在主板上2.0的usb口上,不好意思,这个方法不行。
话不多说,直接上代码。
// 获取所有已连接的 USB 设备
HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
int usb2 = 0;
int usb3 = 0;
for (UsbDevice device : deviceList.values()) {
if (isUsbDrive(device)) {
UsbInterface usbInterface = device.getInterface(0);
int maxPacketSize = usbInterface.getEndpoint(0).getMaxPacketSize();
if (maxPacketSize > 512) {
usb3 = usb3 + 1;
} else {
usb2 = usb2 + 1;
}
}
}
首先获取所有usb设备,然后遍历判断是不是u盘,接着通过 maxPacketSize 来判断u盘是2.0的还是3.0的。
在主板3.0的usb口上,3.0的u盘 maxPacketSize 是1024,2.0的u盘 maxPacketSize 是512。如果是在主板2.0的usb口上,不管你是2.0还是3.0的u盘,maxPacketSize 都是512,所以这个方法仅适用于主板3.0的usb口识别u盘是2.0还是3.0的。