2016-07-22 13 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(); 
    } 

私は、2つのデバイスが差し込まれ、マウスやフラッシュドライブを持っています。

上記のコードは次のように生成:消去法により

[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によると、USB_CLASS_MASS_STORAGEのプロトコルが8あると0は、どちらも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としてプロトコルを返します。私はこれを説明することはできません。

関連する問題