如何检测Android设备是否具有完全的USB支持?

3
我的应用程序使用UsbManager与USB摄像头进行通信。一些设备不支持USB。当枚举设备时,这些设备将返回null或抛出NoSuchMethodError异常。我可以检测到两者并正确显示消息。不幸的是,一些Android设备无法检测到USB设备,但没有出现上述问题,它们只会返回一个空的USB设备列表。如何正确检测此系统是否支持USB OTG?

你尝试过使用android.hardware.usb.host<uses-feature>PackageManagerhasSystemFeature()吗? - CommonsWare
@CommonsWare:if (!context.getPackageManager().hasSystemFeature("android.hardware.usb.host")) 可以工作,非常感谢!请把它变成一个答案。 - Violet Giraffe
2个回答

7
官方确定设备是否具有USB主机功能的方法是使用关联的系统特性。最好在清单中添加<uses-feature>元素,指示您对android.hardware.usb.host功能感兴趣。如果您不绝对需要该功能,请将android:required="false"添加为属性。如果您选择了android:required="false",并且想在运行时确定设备是否为USB主机,请使用PackageManagerhasSystemFeature()FEATURE_USB_HOSTFEATURE_USB_HOST被定义为与您在<uses-feature>中使用的相同字符串(android.hardware.usb.host)。

我有三星Galaxy S3 Neo手机(http://www.gsmarena.com/samsung_i9300i_galaxy_s3_neo-6289.php),该手机不支持OTG,但FEATURE_USB_HOST返回true。 - Muno
有些手机可以从设置中启用/禁用OTG选项。我如何知道它的状态?该手机支持OTG但在设置中被禁用。 - Zacharias Manuel
@ZachariasManuel:我不知道有任何记录和支持的方法来确定这一点。我猜这是某个设备制造商特定的事情,因此如果有一种检测设置状态的方法,那么就由该设备制造商告诉你。 - CommonsWare

0
public static boolean getUsbConnection(Context context) {
        intent = context.registerReceiver(null, new IntentFilter("android.hardware.usb.action.USB_STATE"));
        return intent.getExtras().getBoolean("connected");
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接