2016-07-22 62 views
1

我正在嘗試使用this guide at android.developers來讀取USB大容量存儲閃存驅動器的內容。我在決定哪個驅動器實際上是閃存驅動器時遇到問題。如何確定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是閃存驅動器,和019是鼠標。我不知道003是什麼,也許是內部或其他端口之一(我通過板載以太網連接了adb)。

根據this documentationUSB_CLASS_MASS_STORAGE協議爲80涉及到USB_CLASS_PER_INTERFACE

我怎麼可以在代碼中哪個設備是閃存驅動器決定,如果他們都返回USB_CLASS_PER_INTERFACE?我查看了UsbDevice的其他屬性,而且似乎沒有任何回報對我有用。

回答

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的文件顯示。我無法解釋這一點。