Не удается отобразить список подключенных к USB устройств в Android Kotlin

#android #kotlin #android-usb

Вопрос:

Я создаю приложение для Android с использованием Kotlin. То, что я пытаюсь сделать, это то, что я пытаюсь перечислить все устройства, подключенные через 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
    }
 

Я подключил свое устройство к ноутбуку. Но когда я открывал приложение, список устройств всегда был пуст. Что не так с кодом и как я могу это исправить?

Ответ №1:

Согласно документации, эта функция android.hardware.usb.host выполняет следующие действия:

Когда ваше устройство на базе Android находится в режиме USB-хоста, оно действует как USB-хост, питает шину и перечисляет подключенные USB-устройства. Режим USB-хоста поддерживается в Android 3.1 и выше.

Другими словами, эта функция предназначена для перечисления устройств USB OTG, таких как USB-накопители, веб-камеры или другие USB-клиентские устройства).

Когда вы подключаете ноутбук и телефон через USB, ноутбук обычно становится USB-хостом (мастером), а телефон-клиентом. Поэтому эта функция не предназначена для работы с таким подключением, и поэтому вы не получаете никакого устройства.

Единственный способ заставить его работать-это выбрать в меню уведомлений USB, что телефон Android должен работать как USB-хост. Но поскольку большинство ПК не могут выступать в качестве USB-клиента, это также не даст никакого результата.

Комментарии:

1. Я установил свое устройство Android в качестве хоста, используя свой телефон. Мой ноутбук может быть клиентом. Но сейчас он все еще отображается в списке.

2. Какой тип устройства у вашего ноутбука в клиентском режиме?

3. Это Acer — E5-574G-5713 с установленной Windows 10.

4. Если это обычный компьютер, я не думаю, что он может выступать в качестве USB-клиента, почему вы думаете, что он может? Поэтому я спрашивал, какой тип USB-устройства он имитирует в клиентском режиме.

5. Это означает, что это ПК в компактном корпусе, включающем клавиатуру монитора, сенсорную панель и аккумулятор. Поскольку ПК обычно не поддерживают USB-клиент (двойная роль USB), вы не можете передавать данные между двумя компьютерами, подключенными через USB-C, если только один из них не поддерживает двойную роль, см. Здесь superuser.com/q/1215710/62676