我正在尝试使用this guide at android.developers读取USB海量存储闪存驱动器的内容。我在确定哪个驱动器实际上是闪存驱动器时遇到了问题。
我正在使用此代码迭代设备:
ID
我插入了两个设备,一个鼠标和一个闪存驱动器。
以上代码产生以下内容:
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
是鼠标。我不知道019
是什么,也许是内部或其他端口之一(我通过板载以太网连接003
)。
根据this documentation,adb
的协议为USB_CLASS_MASS_STORAGE
,8
与0
如果代码返回USB_CLASS_PER_INTERFACE
,如何确定代码中的哪些设备是闪存驱动器?我查看了USB_CLASS_PER_INTERFACE
的其他属性,似乎没有任何对我有用的东西。
答案 0 :(得分:1)
我看错了协议。
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());
}
如文档所示,这会将协议返回为80
而不是8
。我无法解释这一点。