androidusbusb-otg

How to detect if Android has full USB support or not?


My application uses UsbManager to communicate with USB cameras. Some devices don't have USB support. These will return null for (UsbManager)context.getSystemService( Context.USB_SERVICE ), or they will throw a NoSuchMethodError exception when enumerating devices. I can detect both and display a message properly. Unfortunately, some Androids that don't detect USB devices cause neither of these problems. They just return an empty list of USB devices. How can I properly detect that this system doesn't support USB OTG?


Solution

  • The official way to determine if the device has USB host capability is to use the associated system feature.

    Ideally, add a <uses-feature> element to your manifest, indicating that you are interested in the android.hardware.usb.host feature. If you do not absolutely need that feature, add android:required="false" as an attribute.

    If you went with android:required="false", and you want to determine whether the device is a USB host at runtime, use PackageManager, hasSystemFeature(), and FEATURE_USB_HOST. FEATURE_USB_HOST is defined as the same string as you would be using in <uses-feature> (android.hardware.usb.host).

    boolean hasSystemFeatureUsbHost() {
        return getPackageManager().hasSystemFeature(PackageManager.FEATURE_USB_HOST);
    }