Как определить, поддерживает ли 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.

Другие вопросы по тегам