【问题标题】:Unable to list the USB connected devices in Android Kotlin无法在 Android Kotlin 中列出 USB 连接的设备
【发布时间】:2021-06-06 16:18:16
【问题描述】:

我正在使用 Kotlin 构建一个 Android 应用。我想要做的是我试图列出所有通过 USB 连接的设备。但设备列表始终为空。

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

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

当活动打开时,在 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
    }

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

【问题讨论】:

    标签: android kotlin android-usb


    【解决方案1】:

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

    当您的 Android 供电设备处于 USB 主机模式时,它充当 USB 主机,为总线供电,并枚举连接的 USB 设备。 Android 3.1 及更高版本支持 USB 主机模式。

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

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

    使其工作的唯一方法是在 USB 通知菜单中选择 Android 手机应作为 USB 主机工作。但由于大多数 PC 无法充当 USB 客户端,因此也不会得到任何结果。

    【讨论】:

    • 我使用手机将我的 Android 设备设置为主机。我的笔记本电脑可以是客户端。但它现在仍然显示在列表中。
    • 您的笔记本电脑在客户端模式下是什么设备类型?
    • It Acer - E5-574G-5713 安装了 Windows 10。
    • 如果是普通PC,我不认为它可以充当USB客户端,为什么你认为它可以?因此,我在问它在客户端模式下模仿什么 USB 设备类型。
    • 这意味着它是一台紧凑型电脑,包括显示器键盘、触摸板和电池。由于 PC 通常不支持 USB 客户端(USB 双重角色),因此您无法在通过 USB-C 连接的两台 PC 之间传输数据,除非其中一台支持双重角色,请参阅此处superuser.com/q/1215710/62676
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2012-11-16
    • 2016-08-18
    • 2017-03-25
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多