You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否获取连接Android设备的硬件键盘信息?UsbManager查询无结果

提取硬件键盘的设备信息(序列号、名称等)

完全可以提取硬件键盘的序列号、名称等信息,你遇到的UsbManager返回空列表问题,主要是权限配置和设备过滤的细节没处理到位,以下是具体解决方法:

  • 修复UsbManager返回空列表的问题
    硬件键盘属于USB HID类设备,你需要确保:

    1. 申请并获取USB设备访问权限
    2. 正确筛选HID类型的设备

    示例代码:

    UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
    HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
    
    for (UsbDevice device : deviceList.values()) {
        // 筛选HID类设备(硬件键盘归为此类)
        if (device.getDeviceClass() == UsbConstants.USB_CLASS_HID) {
            // 提取设备信息
            String deviceName = device.getDeviceName();
            String serialNumber = device.getSerialNumber();
            int vendorId = device.getVendorId();
            int productId = device.getProductId();
            // 这里可以对获取到的信息进行处理
        }
    }
    
  • 权限配置要点
    即使能检测到连接状态,读取设备详细信息也需要用户授权:

    1. 在Manifest中添加权限:
      <uses-permission android:name="android.permission.USB_PERMISSION" />
      
    2. 针对Android 6.0+动态申请权限,或者发送广播请求用户授权:
      if (!usbManager.hasPermission(device)) {
          PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent("com.your.package.USB_PERMISSION"), 0);
          usbManager.requestPermission(device, permissionIntent);
      }
      
    3. 可选:通过xml配置设备过滤规则,让系统自动识别键盘设备
      在res/xml/usb_device_filter.xml中添加:
      <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <!-- 匹配键盘类型的HID设备 -->
          <usb-device class="0x03" subclass="0x01" protocol="0x01" />
      </resources>
      
      然后在Manifest的activity中关联该配置:
      <activity ...>
          <intent-filter>
              <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
          </intent-filter>
          <meta-data 
              android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
              android:resource="@xml/usb_device_filter" />
      </activity>
      
  • 为什么能检测连接但列表为空
    系统的USB连接/断开广播(如ACTION_USB_DEVICE_ATTACHED)不需要特殊权限就能接收,但要让UsbManager返回该设备并读取其信息,必须获得对应USB设备的访问权限,否则设备不会出现在可访问列表中。

内容的提问来源于stack exchange,提问作者Itamar Bitton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:56:13