Как определить, поддерживает ли Android-телефон или планшет Android протокол Open Accessory (AOA)?
Я занимаюсь разработкой приложения для сопряжения аксессуара по протоколу Android Open Accessory (AOA).
Я тестирую приложение, используя телефон (Android 4.2.2) или планшет (Android 4.1). Оба эти устройства имеют USB-разъем Micro-B, а аксессуар имеет USB-разъем типа A. Я использую кабель Micro-B для подключения USB-A для подключения любого из ранее упомянутых устройств Android с аксессуарами.
Ожидается, что приложение появится, как только аксессуар подключится к трубке или планшету.
Работает как положено на телефоне, но не на планшете. После того, как я потратил много времени на отладку этой проблемы, мне пришло в голову, что планшет может не поддерживать протокол AOA. (JFYI: таблица поддерживает режим OTG).
Поэтому мои вопросы:
1) Кто-нибудь сталкивался с каким-либо приложением, которое может сообщить, поддерживает ли устройство AOA или нет? 2) Кто-нибудь знает программный способ обнаружения поддержки AOA на устройстве Android?
Заранее благодарим за помощь со стороны участников сообщества.
PS Я уже прочитал ответ для аналогичной проблемы, упомянутой в - 1) Как определить, есть ли на устройстве Android режим открытых аксессуаров2) Поддерживает ли Acer Iconia Tab A500 режим аксессуаров?3) Какой планшет Android в настоящее время поддерживает режим аксессуаров для разработки ADK4) Какие устройства Android поддерживают ADK / открытый аксессуар- без какого-либо результата.
2 ответа
Я нашел ответ. Приложение для Android может быть запрограммировано для определения, поддерживается ли режим USB-аксессуара или нет. Хитрость заключается в том, чтобы использовать Android PackageManager, чтобы убедиться, что FEATURE_USB_ACCESSORY присутствует или отсутствует на телефоне или планшете. Ниже приведен соответствующий фрагмент кода:
PackageManager pm;
pm = getActivity().getPackageManager();
boolean isUSBAccessory = pm.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY);
if(!isUSBAccessory){
Toast.makeText(getActivity(), "USB Accessory not supported", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getActivity(), "USB Accessory supported", Toast.LENGTH_SHORT).show();
}
Этот код тестируется на телефоне и планшете, как указано в вопросе. В телефоне отображается сообщение "USB Accessory поддерживается", а на планшете - "USB аксессуар не поддерживается".
Взгляните на Android AOA и AOA 2.0. AOA выпустила две версии, 1.0 и 2.0. Последняя версия 2.0.
Android Open Accessory Protocol 2.0 добавляет две новые функции: вывод звука (с устройства Android на аксессуар) и поддержку аксессуара, выступающего в качестве одного или нескольких устройств интерфейса пользователя (HID) на устройстве Android.
Чтобы узнать номер версии AOA, отправьте запрос управления USB следующим образом
requestType: USB_DIR_IN | USB_TYPE_VENDOR
request: 51
value: 0
index: 0
data: protocol version number (16 bits little endian sent from the
device to the accessory)
Для устройств, поддерживаемых AOA 2.0, запрос управления вернет 2.