微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决无法在 Android Kotlin 中列出 USB 连接的设备

我正在使用 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
    }

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

解决方法

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?