#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