- Как узнать, поддерживает ли телефон или планшет Android протокол Android Open Accessory (AOA)?
- 2 ответа
- Похожие вопросы:
- Android open accessory что это такое
- Android и Arduino. Введение в ADK
- Google ADK Board
- Google ADK 2012 Board
- Arduino ADK
- Seeeduino ADK Main Board
- FEZ Panda II
- USB Host Shield
- Режимы MicroBridge и Open Accessory
- Протокол Android Open Accessory 2.0
Как узнать, поддерживает ли телефон или планшет Android протокол Android Open Accessory (AOA)?
Я занимаюсь разработкой приложения для интерфейса аксессуар, используя Android открыть вспомогательное оборудование (AOA) протокол.
Я тестирую приложение с помощью телефона (Android 4.2.2) или планшета (Android 4.1). Оба этих устройства имеют розетку типа USB Micro-B, в то время как аксессуар имеет розетку типа USB A. Я использую кабель Micro-B plug to USB-a plug для подключения любого из ранее упомянутых устройств Android с аксессуаром.
Ожидается, что приложение всплывет, как только аксессуар будет подключен к телефонной трубке или планшету.
Он работает, как и ожидалось, на телефоне, но не на планшете. После того, как я потратил много времени на отладку этой проблемы, мне пришло в голову, что планшет, возможно, не поддерживает протокол AOA. (JFYI: таблица поддерживает режим OTG).
Поэтому мои вопросы таковы:
1) Кто-нибудь сталкивался с каким-либо приложением, которое может сообщить, поддерживает ли устройство AOA или нет? 2) кто-нибудь знает программный способ обнаружения поддержки AOA на устройстве android?
Заранее спасибо за предстоящую помощь от членов сообщества.
2 ответа
Я работаю над проектом, в котором наша встроенная система поддерживает как Android open accessory protocol, так и USB MTP. Мы столкнулись с проблемой, когда USB MTP не работает, когда AOAP сеанс установлен с Android устройством. Я в принципе заблудился, я даже не знаю, возможно ли, чтобы оба.
Я хочу создать приложение android, где я могу общаться с клавиатурой (hid). Во-первых, я пытаюсь связаться с клавиатурой через хост usb, но, похоже, клавиатура не появляется на UsbManager.getDeviceList(). Я читал о AOA. Моя проблема в том, что я не понимаю, как я могу настроить протокол. Я понял.
Я нашел ответ. Приложение android может быть запрограммировано на определение того, поддерживается ли режим USB аксессуаров или нет. Хитрость заключается в том, чтобы использовать android PackageManager для проверки наличия или отсутствия FEATURE_USB_ACCESSORY на телефоне или планшете. Ниже приведен соответствующий фрагмент кода:
Этот код тестируется на телефоне и планшете, как уже упоминалось в вопросе. Телефон произносит сообщение «Поддерживается аксессуар USB», где as, планшет произносит тосты «USB Accessory not supported».
Взгляните на Android AOA & AOA 2.0 . AOA выпустила две версии, 1.0 и 2.0. Последнее-2.0.
Протокол Android Open Accessory Protocol 2.0 добавляет две новые функции: аудиовыход (от устройства Android к аксессуару) и поддержку аксессуара, действующего в качестве одного или нескольких устройств человеческого интерфейса (HID) для устройства Android.
Чтобы узнать номер версии AOA, отправьте запрос управления USB следующим образом
Для поддерживаемых устройств AOA 2.0 запрос управления вернет 2.
Похожие вопросы:
Я хочу, чтобы мой настольный компьютерный сервер был клавиатурой для устройства Android. В соответствии с протоколом Android Open Accessory это должно быть возможно: AOA 2.0 allows the accessory.
Используя стандарт Android Open Accessory standard, у меня есть устройство с питанием android, говорящее взад и вперед с arduino mega ADK microcontroller, подключенным через USB. Я хотел бы знать.
Я создал приложение, которое очень хорошо работает на планшетах и телефонах. Для обнаружения (настройки интерфейса) я использовал ширину и высоту.. if width > 1280 -это должен быть планшет.
Я работаю над проектом, в котором наша встроенная система поддерживает как Android open accessory protocol, так и USB MTP. Мы столкнулись с проблемой, когда USB MTP не работает, когда AOAP сеанс.
Я хочу создать приложение android, где я могу общаться с клавиатурой (hid). Во-первых, я пытаюсь связаться с клавиатурой через хост usb, но, похоже, клавиатура не появляется на.
Есть ли способ программно выяснить, поддерживает ли конкретный телефон на базе Android(не корневой) LTE или нет? Я не смог найти никакой связанной информации в документах. Любая информация была бы.
Здравствуйте, я создал приложение, в котором я хочу обнаружить планшет или мобильный телефон при запуске. У меня есть планшет 5.5. Как сделать это возможным ?
Я разрабатываю приложение android, которое совместимо как для мобильного экрана, так и для экрана планшета. Поэтому я создаю 4 разных экрана для каждого. То есть login_portrait.xml.
detectmobilebrowsers.com предоставляет эту линию для мобильного обнаружения на nginx: if ($http_user_agent
* (android|bb\d+|meego).+mobile| . Чтобы включить обнаружение планшета, они.
Источник
Android open accessory что это такое
После того как я разбил тач на Nexus 7 2013, а теперь сломалось запоминание канала HDMI на «народном» контроллере (+ отваливание хаба от, скорее всего, перегрева) появилась идея использовать вместо полной интеграции телефон с каким-либо крепежом. Первым делом подумал о том, что зае. устану постоянно подключать/отключать, но затем понял, что скорее всего нет, с учётом того что будет всего один кабель.
Идея, конечно же, не нова. Вопросы надо решить следующие:
- Зарядка телефона
- Как пустить звук
- Кнопки на руле (ну в целом управление)
- Возможная периферия (датчики температуры и т.п.)
- Камера заднего вида
Список выше составлен с учётом того что всё это уже было при «полной» интеграции.
1. Зарядка телефона
Всё просто — usb-кабель одним концом в телефон, другим в зарядник. Надеюсь что сработает.
2. Звук
Звук можно было бы пустить через предназначенный для этого разъём, но подключать два кабеля это перебор. Bluetooth. Bluetooth, в целом, это прекрасная штука. Но вот звук по bluetooth не всегда хороший. Я не претендую на экспертные знание в области bluetooth-звука, но есть у меня Alpine CDE-195BT и я пробовал соединение по BT. Не могу сказать, что качество ужас, но вот разницу с AUX слышу даже я со своими неаудиофильскими ушами. Причём, с Nexus 7 2013 было даже нормально, а вот с geekbox совсем никак. Я слышал про aptX, но поддержка должна быть и на «приёмнике» и на «передатчике».
Мне очень повезло наткнуться на проект USB audio dock for Android товарища Jacek Fedoryński. Посмотрев что к чему, расчехлил Raspberry Pi и решил повторить, тем более, что Android Open Accessory Protocol 2.0 решал почти все остальные проблемы из списка.
Сделав всё как в инструкции, я потерпел крах. Звук никак не хотел «идти» куда надо. Но! Сам протокол включался и телефон переходил в режим AOA2, и звук с него просто пропадал, значит он уходил к RPi, а он (пирог же, в переводе) уже лажал и не отдавал звук. Этот факт вселил в меня надежду и я начал дебажить RPi. Опытным путём было установлено что не пашет PulseAudio. Ну как не пашет. если после подключения телефона самому выполнить команду:
то звук чудесным образом появлялся, но вот автоматически никак не хотел. Не хотел и от root’а. Я не знаток linux систем и не знаю от чьего имени выполняются скрипты из правил udev, но все возможные варианты сделать PulseAudio системным демоном/дать права всем пользователям положительного результата не дали.
Ситуация с PulseAudio меня деморализовала. В тщетных попытках нагуглить решение с PulseAudio я натыкаюсь на проект AndroidCarAudioDock. Меняем проблемную строчку на:
и звук уже не пропадает. Проблема, ну на сколько я понял, такая: udev’у нужно чтобы скрипт что-то вернул, чаще всего: ноль — всё хорошо, отрицательные числа — что-то пошло не так. Например exit 0 в конце скрипта. Можно ещё запуск команды в фоне ( . )$. Я честно всё перепробовал, но timeout срабатывал. Заработало только когда запускал через echo . | at now.
В итоге получается, что по одному кабелю идёт зарядка (хоть и максимум 0.5А) и транслируется звук. К RPi можно подключить DAC или взять звук с HDMI и подключить в AUX.
3. Кнопки на руле
4. Возможная периферия (датчики температуры и т.п.)
Наверное можно объединить в один пункт. На счёт периферии все понятно, как подключать всякие модули к RPi информации куча. Плох тот факт, что у RPi нет аналогового входа, что осложняет подключение резистивных кнопок, находящихся на руле (ну и может быть каких-либо датчиков, которые Вы захотите подключить). Но есть куча вариантов решения, в том числе готовые модули.
Передавать информацию с этих датчиков оказалось очень просто, учитывая тот факт, что я чуть-чуть умею писать программы, в том числе на Python и Android
AOA Protocol 2.0 сам умеет запускать нужную программу при подключении телефона к чему либо. Примерно так:
- Подключаем usb-кабелем Android к ЧёрномуЯщику (назовём так).
- ЧёрныйЯщик понимая что к нему что-то прицепилось по USB, посылает пакеты с информацией: название, производитель, версия. И ещё что он хочет принять аудио.
- Если подключенным устройством оказался Android, то он отсылает версию AOA протокола, отдаёт звук (если может), и пытается запустить программу соответствующую этому конкретному ЧёрномуЯщику (так как уже знает название, производителя и версию).
Всё, дело в шляпе. Пишем программку типа моего ненавистного SerialManager’а, получаем и обрабатываем команды.
5. Камера заднего вида
Лично для меня это просто «Смотрите что ещё у меня в машине есть», а все «Ничего себе Как такое возможно».
Есть вариант подключения. Принцип такой — при включении камеры релюшки отключают Android от RPi и подключают OTG с Easycap. Более элегантного решения я придумать не смог.
—- Промежуточный итог —-
Мой репозиторий: https://github.com/delletenebre/AndroidCarAudioDock (описание пока что от форкнутого AndroidCarAudioDock)
Программа для android как прототип уже работает.
Кстати, для облегчения подключения заказал такие магнитные адаптеры.
На данный момент это просто эксперимент. Медленно продвигающийся. Возможно, что всё заброшу.
Источник
Android и Arduino. Введение в ADK
В 2011 г. корпорация Google представила стандарт Android Open Accessory, который обеспечивает взаимосвязь между внешними USB-устройствами (Arduino-подобными платами и др.) и Android-устройством. Начиная с версии Android 3.1 (поддержка AOA портирована и в Android 2.3.4) по замыслу Google все устройства должны поддерживать USB соединение в режиме «accessory mode». В данном режиме подключенное устройство (к примеру плата Arduino) является хостом (в т.ч. питает шину 5В/500мА), а Android устройство является периферийным. В дополнении ко всему Google выпустила предназначенную для разработчиков плату ADK 2011 на базе Mega2560. В версии ADK 2012 используется микроконтроллер ARM 32-bit Cortex M3.
Для чего это необходимо? Данная взаимосвязь между устройством на базе Android и Arduino-подобными платами открывает массу возможностей для разработчика и радиолюбителя: управление сервоприводами, двигателями, индикацией с Android-телефона, считывание состояние датчиков на Android телефоне или планшете, таких как гироскоп, акселерометр, компас, GPS, передачу данных через GPRS/HDSPA модуль планшета и многое другое.
В данном цикле статей я хотел бы шаг за шагом рассказать о некоторых возможностях USB-связи между Android и Arduino.
На сегодняшний день существует уже достаточное количество плат разработчика поддерживающих Android Open Accessory протокол. Приведем некоторые из них:
Google ADK Board
Плата, анонсированная Google. Используется микроконтроллер ATmega2560 (как и в большинстве других плат, анонсированных в 2011 году).
8-ми битный контроллер ATmega2560 содержит 256 КБ внутренней флэш памяти и работает на частоте 16 МГц. Память SRAM — 8 КБ и EEPROM – 4 КБ. На плате предусмотрено 54 цифровых входа/выхода (14 из которых могут работать как ШИМ выходы) и 16 аналоговых входов (10 бит АЦП).
Помимо этого на плате уже напаяна некоторая периферия: 3 кнопки, 3 RGB светодиода, джойстик, датчик температуры, фотодиод, емкостный сенсор (логотип андроида), 2 реле 24В/1А, три коннектора для подключения серво приводов.
Однако есть один существенный минус – стоимость платы, которая составляет почти 400$, что делает ее совсем непривлекательной в радиолюбительских разработках. Да и найти и купить такую плату честно говоря сложновато даже в зарубежных интернет-магазинах.
Google ADK 2012 Board
На конференции Google I/O 2012 в конце июня 2012 г. была представлена новая плата для разработчиков (впрочем как и анонсирован новый протокол Android Open Accessory 2.0 с поддержкой аудио и подключением сразу нескольких устройств к Android). Данная плата также совместима с Arduino форм-фактором, однако в ней используется уже более мощный ARM процессор: 32-битный Cortex M3.
Плата Arduino DUE, выход которой намечен на 2012 также будет содержать процессор Atmel ATSAM3X8E ARM Cortex-M3
Помимо этого на плате существенно обновилась и периферия: добавился слот SD, модуль Bluetooth и NFC, акселерометр, датчик атмосферного давления, влажности, приближения, емкостной слайдер, 6 семисегментных светодиодных RGB матрицы, а также УНЧ и динамик. Ну и сама плата теперь переехала в корпус в виде будильника.
В ADK2012 добавлена возможность передачи звука по USB соединению (начиная с версии Android 4.1 – API 16 и выше). Файлы схем платы ADK2012 и программные файлы доступны для скачивания.
Цена платы на текущий момент составляет около 500$.
Arduino ADK
Это уже более доступная плата от известной итальянской компании. В плате используется микроконтроллер ATmega2560, а также микросхема USB хоста MAX3421e для соединения с Android-устройством. Плата содержит 54 цифровых входа/выхода (15 из них могут работать как ШИМ), 16 аналоговых входов, 256 КБ флэш памяти (из которых 8 КБ отведены под загрузчик), SRAM — 8 КБ, EEPROM — 4 КБ.
Более подробное описание платы на английском языке можно найти здесь. Стоимость платы Arduino ADK R3 на текущий момент составляет 50 евро.
Seeeduino ADK Main Board
Вариант платы от компании Seeed Studio, в данной плате также используется микроконтроллер ATmega2560. В плате есть 56 цифровых входа/выхода (14 из них могут работать как ШИМ), в остальном аналогично Arduino ADK. В качестве микросхемы USB-хоста используется MAX3421. На плате предусмотрен микропереключатель уровней 3.3В/5В.
Более подробное описание находится здесь. Официальная стоимость платы составляет 80$.
Именно с этой платой мы и будем в дальнейшем работать. Плата была приобретена на eBay за 60$.
Разработка от известного за рубежом интернет-магазина SparkFun. Сердцем платы служит микроконтроллер PIC24FJ256-DA206 работающий на 32МГц и имеющий 256КБ памяти программ и 96КБ RAM-памяти. На плате установлен только один USB-разъем для соединения с Android-устройством. Плата содержит 48 цифровых входов/выходов, из них 16 пинов могут быть задействованы ка аналоговые входы. На любой I/O можно повесить прерывание. Более подробная документация по IOIO Board находится здесь.
Стоимость платы в SparkFun составляет 50$.
FEZ Panda II
Плата компании GHI Electronics содержащей 32-битный 72МГц процессор ARM7. Плата совместима с Arduino форм-фактором и большинством Arduino-шилдов, но разработка ПО ведется с применением .NET Micro Framework. О данной плате мы подробно писали в данной статье: обзор FEZ Panda II.
Данная плата была выпущена еще до появления ADK, но уже имела возможность работы в качестве USB-хоста, поэтому для поддержки Android Open Accessory понадобилось всего лишь написать соответствующее ПО, которое можно взять здесь: код для FEZ, код для Android.
Справедливости ради, стоит отметить, что данный код применим не только к плате FEZ Panda II, а практически ко всем платам компании GHI Electronics на ядре .NET Micro Framework, а это FEZ Domino, FEZ Hydra, FEZ Cerbuino Bee и др. платы с USB хостом.
Стоимость платы FEZ Panda II на сегодняшний момент составляет 40$
USB Host Shield
Шилд к Arduino (плата, которая устанавливается сверху Arduino, в стандартные разьемы). Хороший вариант, когда у вас уже есть плата Arduino. Вариантов таких шилдов несколько: от DFRobot — USB Host Shield for Arduino, от Emartee — Arduino ADK Shield For Android, от Circuits@Home — USB Host Shield 2.0 и др., объединяет их одно – наличие микросхемы USB-хоста.
Цены на USB хост шилды варьируются в пределах 20-35$.
Режимы MicroBridge и Open Accessory
Как уже было сказано выше, корпорация Google для обмена информации между устройствами Android и Arduino (и др.) представила стандарт Android Open Accessory. Однако, он поддерживается Android устройствами начиная с версии 3.1 (но также был портирован на Android и в Android 2.3.4).
Существует второй режим работы – Android Debug Bridge (ADB) в MicroBridge режиме, который поддерживается устройствами на базе Android версии 1.5 и выше.
В качестве Android устройства будет выступать современный 7″ планшет Ainol Aurora с версией андроида 4.0.4, который казалось бы должен поддерживать режим Open Accessory. Однако это не так, и я так и не смог получить связь в данном режиме. При чтении зарубежных форумов и информации, я выяснил, что наличие на вашем аппарате версии Android 3.1 и выше еще не означает 100% работу в режиме Android Open Accessory.
Вот небольшой список устройств, которые совместимы с режимом Open Accessory:
Acer Iconia A100
Acer Iconia A500
ASUS Eee Pad Transfomer TF101
Dell Streak 10 Pro
Foxconn Commtiva-HD710
Google Nexus S
Google Nexus One
HTC EVO 3D
HTC PH4100
HTC Sensation 4G
HTC Nexus One
LG Optimus Pad
LG Optimus 2X
Motorola Xoom
Samsung Galaxy A
Samsung Galaxy Ace
Samsung Galaxy S
Samsung Galaxy Tab 10.1
Toshiba AT100
Для остальных устройств, возможно придется менять прошивки, ставить моды, патчи и т.п., в общем танцы с бубном. И в конце не факт, что еще и заработает, как это и получилось у меня с планшетом Ainol Aurora.
Однако, я приведу небольшой список того, что возможно поможет запустить ваш планшет с поддержкой режима Android Open Accessory:
1. Установите root права и программу Root Explorer и проверьте наличие файлов /system/framework/com.android.future.usb.accessory.jar и /system/etc/permissions/android.hardware.usb.accessory.xml. Если их нет, то режим Open Accessory работать не будет. Самый важный – это первый файл, необходимо найти прошивку или мод для вашего устройства, в котором содержится данный файл. Наиболее популярным является Cyanogen Mod.
Файл android.hardware.usb.accessory.xml вы можете скачать здесь, он служит для разрешения запуска файла com.android.future.usb.accessory.jar.
Когда файла нет, то компилятор Eclipse обычно «ругается»: INSTALL_FAILED_MISSING_SHARED_LIBRARY
2. Иногда помогает установка следующей строки CONFIG_USB_ANDROID_ACCESSORY=y в файле /proc/config.gz. Однако не во всех Android устройствах есть этот файл, в моем не было.
3. Проверьте типы используемых USB библиотек Open Accessory. Иногда в проекте необходимо заменить com.android.future.usb на android.hardware.usb (плюс переделать файл манифеста, коды вызова библиотек и т.п.). Подробнее об этом написано здесь и здесь.
4. Попробуйте отключить режим ADB в настройках планшета.
Я проделал все вышеперечисленные процедуры, но на Android планшете все также красовалась надпись «Please connect a DemoKit board», а в логах планшета (для этого я использовал LogCat) для приложения DemoKit отображалось: «mAccessory is null», что означает, что Android не обнаружил Accessory-совместимых устройств на USB шине.
В то же время, в PortMonitor из Arduino IDE, был такой лог: «Device addressed. Requesting device descriptor. found possible device. swithcing to serial mode device supports protocol 1 or higher»
Т.е. моя плата Seeeduino ADK Main Board по всей видимости видела USB-устройство, но не открывало соединение по протоколу Open Accessory. Несколько дней экспериментов, правок программ и анализа логов ни к чему не привели.
Если вам так и не удалось установить связь с использованием режима Android Open Accessory, то в режиме MicroBridge, ваше Android устройство должно точно заработать. Его мы и будем использовать в наших дальнейших проектах. Если с выходом нового мода или прошивки у меня получится установить связь в режиме Open Accessory, то работу в этом режиме я постараюсь также описать.
В следующей статье мы рассмотрим необходимое программное обеспечение для работы с Android и Arduino, его установку и настройку.
Протокол Android Open Accessory 2.0
В конце июня 2012 был корпорацией Google был анонсирован протокол AOA 2.0. Основными нововведениями стали поддержка аудио и работа Android сразу с несколькими HID устройствами. Подержка AOA 2.0 будет осуществлятся устройствами с версией Android 4.1 Jelly Bean (уровень API 16) и выше.
В версии AOA 1.0, содержалось только два USB product ID:
0x2D00 – accessory
0x2D01 — accessory + ADB
В версии AOA 2.0 добавились следующие product ID:
0x2D02 – audio
0x2D03 — audio + ADB
0x2D04 — accessory + audio
0x2D05 — accessory + audio + ADB
Теперь с Android устройства возможно передавать аудио-поток на подключенное accessory устройство. Пока что это 2-х канальный 16-бит PCM аудио поток с битрейтом 44100 кГц, но в дальнейшем список поддерживаемых форматов может быть расширен.
Источник