【问题标题】:How to detect if Android has full USB support or not?如何检测 Android 是否完全支持 USB?
【发布时间】:2014-07-19 00:17:53
【问题描述】:

我的应用程序使用UsbManager 与USB 摄像头通信。某些设备不支持 USB。这些将为(UsbManager)context.getSystemService( Context.USB_SERVICE ) 返回null,或者在枚举设备时会抛出NoSuchMethodError 异常。我可以检测到两者并正确显示消息。不幸的是,一些不检测 USB 设备的 Android 不会导致这些问题。他们只是返回一个空的 USB 设备列表。如何正确检测到此系统不支持 USB OTG?

【问题讨论】:

  • 您是否尝试过将android.hardware.usb.host<uses-feature>PackageManagerhasSystemFeature() 一起使用?
  • @CommonsWare: if (!context.getPackageManager().hasSystemFeature("android.hardware.usb.host")) 工作,非常感谢!请给出答案。

标签: android usb usb-otg


【解决方案1】:
public static boolean getUsbConnection(Context context) {
        intent = context.registerReceiver(null, new IntentFilter("android.hardware.usb.action.USB_STATE"));
        return intent.getExtras().getBoolean("connected");
    }

【讨论】:

    【解决方案2】:

    确定设备是否具有 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 (gsmarena.com/samsung_i9300i_galaxy_s3_neo-6289.php) 这个手机不支持OTG,但是FEATURE_USB_HOST返回true。
    • 某些手机可以选择从设置中启用/禁用 OTG。我怎么知道那个状态?手机支持 OTG,在设置中被禁用。
    • @ZachariasManuel:我不知道有任何记录和支持的方法来确定这一点。我的猜测是,这是特定于该设备制造商的东西,因此该设备制造商会告诉您是否有办法检测设置的状态。
    猜你喜欢
    • 2015-10-10
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2017-05-31
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多