无法在 Android Kotlin 中列出 USB 连接的设备

Unable to list the USB connected devices in Android Kotlin

我正在使用 Kotlin 构建一个 Android 应用程序。我想做的是列出所有通过 USB 连接的设备。但是设备列表总是空的。

首先我在 AndroidManifest.xml 文件中加入以下声明:

<uses-feature android:name="android.hardware.usb.host" />

当 activity 打开时,在 onCreate 方法中,我调用了以下函数来获取 USB 连接设备的列表:

private fun getDeviceList(): ArrayList<UsbDevice> {
        var deviceList: ArrayList<UsbDevice> = ArrayList()

        var usbManager: UsbManager = activity?.getSystemService(Context.USB_SERVICE) as UsbManager
        for (device in usbManager.deviceList.values) {
            deviceList.add(
                UsbDevice(
                    id = device.deviceId.toString(),
                    name = device.deviceName,
                    model = "device"
                )
            )
        }

        if (usbManager.accessoryList != null) {
            for (accessory in usbManager.accessoryList) {
                deviceList.add(
                    UsbDevice(
                        id = accessory.serial.toString(),
                        name = accessory.description.toString(),
                        model = "accessory"
                    )
                )
            }   
        }

        return deviceList
    }

我已将我的设备连接到笔记本电脑。但是当我打开应用程序时,设备列表总是空的。代码有什么问题,我该如何解决?

根据 documentation 功能 android.hardware.usb.host 执行以下操作:

When your Android-powered device is in USB host mode, it acts as the USB host, powers the bus, and enumerates connected USB devices. USB host mode is supported in Android 3.1 and higher.

换句话说,此功能旨在枚举 USB OTG 设备,如 USB 闪存驱动器、网络摄像头或其他 USB 客户端设备)。

当您通过 USB 连接笔记本电脑和 phone 时,笔记本电脑通常成为 USB 主机(主机),而 phone 是客户端。因此,此功能不适用于此类连接,因此您无法获得任何设备。

让它工作的唯一方法是在 USB 通知菜单中 select Android phone 应该作为 USB 主机工作。但由于大多数 PC 无法充当 USB 客户端,这也不会得到任何结果。