gpt4 book ai didi

android - 如何判断USB Host设备类型?

转载 作者:行者123 更新时间:2023-11-30 01:09:52 24 4
gpt4 key购买 nike

我正在尝试使用 this guide at android.developers 读取 USB 大容量闪存驱动器的内容。 .我无法确定哪个驱动器实际上是闪存驱动器。

我正在使用此代码遍历设备:

    protected override void OnResume()
{
usbManager = (UsbManager)this.GetSystemService(Context.UsbService);
monitorUsb();
}

private async void monitorUsb()
{
var deviceList = usbManager.DeviceList;
foreach (var device in deviceList.Values)
{
Debug.WriteLine("USB",device.DeviceName);
Debug.WriteLine("USB",device.DeviceProtocol.ToString());
}
await Task.Delay(30000);
monitorUsb();
}

我插入了两个设备,一个鼠标和一个闪存驱动器。

上面的代码产生以下结果:

[0:] /dev/bus/usb/003/003
[0:] 0
[0:] /dev/bus/usb/003/019
[0:] 0
[0:] /dev/bus/usb/003/020
[0:] 0

通过排除,020是U盘,019是鼠标。我不知道 003 是什么,也许是内部端口或其他端口之一(我通过板载以太网连接了 adb)。

根据 this documentationUSB_CLASS_MASS_STORAGE协议(protocol)为80USB_CLASS_PER_INTERFACE

相关

如果它们都返回 USB_CLASS_PER_INTERFACE,我如何在代码中确定哪个设备是闪存驱动器?我查看了 UsbDevice 的其他属性,但似乎没有一个返回对我有用的任何内容。

最佳答案

我找错协议(protocol)了。

        foreach (var device in deviceList.Values)
{
for (int i = 0; i < device.InterfaceCount; i++)
{
var deviceInterface = device.GetInterface(i) as UsbInterface;
Debug.WriteLine("USB", deviceInterface.InterfaceProtocol.ToString());
};

//Debug.WriteLine("USB", device.DeviceName);
//Debug.WriteLine("USB", device.DeviceProtocol.ToString());
}

这会将协议(protocol)返回为 80 而不是文档建议的 8。我无法解释这一点。

关于android - 如何判断USB Host设备类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38524860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com