У меня проблема с моим Android приложением, которое должно обмениваться данными через подключенное USB-устройство (пользовательский аудиоинтерфейс) в Android Эмулятор (API-28) в macOS.
По какой-то причине код не срабатывает claimInterface()
функция:
UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); //pass
UsbDeviceConnection connection = mUsbManager.openDevice(device); //pass
UsbInterface intf2 = device.getInterface(2); //pass
connection.claimInterface(intf2, true); //<< fails here!
Этот код отлично работает на реальном Android телефоне, но в эмуляторе - нет. Код может обнаружить устройство, может найти информацию дескриптора, но не может передать функцию claimInterface()
.
Я уже выполнил необходимые шаги, чтобы USB-API работал в эмуляторе, записав необходимые настройки в /system/etc/permissions/android.hardware.usb.host.xml
, запустил эмулятор с Опция -writable-system
и сопоставление моего устройства с QEMU с помощью этой команды:
sudo ./emulator -writable-system -avd a9 -qemu -usb -device usb-host,vendorid=0x0483,productid=0x5730
Я подозреваю, что на драйвере ядра хоста можно получить контроль над моим устройством, поэтому я выгружаю драйвер с помощью этой команды:
sudo kextunload /System/Library/Extensions/AppleUSBAudio.kext
После выгрузки драйвера я больше не могу видеть мое устройство в настройках звука Ma c, но все еще имеет ту же ошибку в Android App.
Что может быть здесь не так и как решить этот вопрос?