- Для чего нужна OTG функция на Андроид: 12 секретов ее использования
- 1. Зарядите от смартфона с поддержкой USB Host OTG другое устройство
- 2. Подключите портативный жесткий диск
- 3. Подключите к смартфону с функцией OTG игровой контроллер
- 4. Подключите USB лампу
- 5. Присоедините сетевой кабель LAN
- 6. Передайте списки Контактов и Сообщения на другой телефон
- 7. Присоедините клавиатуру или мышь
- 8. Присоедините внешнюю веб-камеру
- 9. Печатайте документы напрямую с Андроид телефона
- 10. Жарко? Подключите USB вентилятор
- 11. Создавайте музыку на Андроид
- 12. Запишите аудио через внешний микрофон
- Usb host android как включить
Для чего нужна OTG функция на Андроид: 12 секретов ее использования
Как вы уже наверняка знаете функция или технология USB OTG или USB On-The-Go является одним из важных изобретений, расширяющим преимущества старой спецификации USB. Эта технология может использоваться самими разными способами. В этой статье я открою вам 12 самых интересных секретов, как пользоваться OTG функцией на Андроид.
USB On-the-Go (USB OTG) позволяет смартфонам с интерфейсом USB выполнять роль хоста для подключенных к нему USB устройств. Что позволяет расширить функционал любого мобильного гаджета с поддержкой OTG. Самое известное расширение – двусторонний обмен данными с внешним накопителем типа флешки или портативного HDD. Кто-то резонно вспомнит другое применение — подключение к телевизору. Но о том, как подключить смартфон к телевизору HDMI кабелем я расскажу вам в отдельной статье.
1. Зарядите от смартфона с поддержкой USB Host OTG другое устройство
Эту функцию с удовольствием оценит каждый пользователь Android. Ведь она позволяет заряжать смартфон от другого смартфона с функцией OTG, играющим роль USB хоста. Отличная технология, которая позволяет зарядить мобильное устройство в экстренных случаях.
2. Подключите портативный жесткий диск
К смартфону с поддержкой OTG через стандартный OTG кабель Вы можете присоединить портативный жесткий диск или любой другой внешний накопитель. Для этого просто соедините их между собой. Получить доступ к внешнему хранилищу данных и скопировать файлы на него крайне просто.
3. Подключите к смартфону с функцией OTG игровой контроллер
Если вы считаете, что играть в шутеры на Андроид-устройствах скучно и неудобно, то подключение внешнего игрового контроллера может кардинально изменить ситуацию. Используйте для подключения OTG кабель. В настоящее время большое количество мобильных игр для Андроид поддерживает внешние геймпады и подключить их к смартфону через OTG сможет каждый.
4. Подключите USB лампу
Скажите, вам бы понравилось, если ваш телефон в экстренных случаях сможет заменить светодиодную лампу? Думаю, да! Теперь это действительно возможно. OTG функция на Андроид позволяет подключить к USB интерфейсу LED светильник через тот же OTG кабель. Такую подсветку вы даже сможете использовать для фотосъемки ночью, если энергии встроенной вспышки будет недостаточно для освещения сцены.
5. Присоедините сетевой кабель LAN
А может у вас появилась нужда подключиться к широкополосному интернету напрямую, через сетевой кабель? Тогда купите адаптер LAN to USB и подключите его к USB интерфейсу с поддержкой OTG своего смартфона. Если по каким-то причинам вы не можете использовать беспроводный доступ к сети Интернет (нет подключения к WiFi или 3G сети), это решение спасет вас. Все что нужно — купите USB OTG порт и переходник на сетевой Ethernet интерфейс.
6. Передайте списки Контактов и Сообщения на другой телефон
С помощью приложения Samsung’s SmartSwitch или подобного софта вы можете передать все сообщения, журнал звонков и список контактов с вашего телефона на другой. Для это достаточно соединить оба устройства с помощью OTG кабеля. Помимо удобства и высокой скорости передачи данных этот способ позволит сэкономить заряд батареи. Отмечу, что обмен данными с другим Андроид устройством возможен лишь в одном случае — если оба гаджета поддерживают технологию OTG.
7. Присоедините клавиатуру или мышь
Вам не привычен стандартный способ навигации по интерфейсу Android устройства? Вы очень часто работает в мессенджерах WhatsApp и Facebook? Тогда вам будет удобнее работать с внешним устройством ввода, таким как клавиатура или мышь. И тут вам тоже будет кстати OTG функция на Андроид. Для вас не составит труда подключить к USB интерфейсу мышку или клавиатуру. Для этого подойдет стандартный OTG кабель. Более того, вы можете таким способом подключить и беспроводные устройства ввода, просто вставьте в OTG порт радиомодуль.
8. Присоедините внешнюю веб-камеру
Если вы являетесь фанатом цифровой фотографии, то возможность подключения внешней камеры к OTG порту Андроид устройства вас сильно порадует. Теперь не нужно подключать камеру к настольному компьютеру. Просто используйте возможности встроенной функции OTG.
9. Печатайте документы напрямую с Андроид телефона
Приложение PrintShare автоматически загрузит необходимые драйвера для подключения к USB порту принтера. Далее просто подключитесь через OTG кабель и распечатайте необходимый документ непосредственно со своего смартфона.
10. Жарко? Подключите USB вентилятор
Как известно, USB вентилятор отлично работает в паре с традиционным зарядным устройством. Напротив, вы могли наблюдать, что охлаждающие подставки для ноутбуков для питания вентиляторов часто подключаются к USB порту устройства. Для Андроид устройств это тоже возможно – просто подключите USB фан через O TG кабель.
11. Создавайте музыку на Андроид
Сегодня любой музыкант подтвердит, что большинство современных музыкальных инструментов (синтезаторы, гитары) можно подключить к компьютеру через MIDI интерфейс. Так вот, с приходом стандарта USB OTG появилась возможность подключить их и к вашему смартфону на платформе Android.
12. Запишите аудио через внешний микрофон
Эта функция пригодится многим, особенно создателям Youtube роликов. Любой смартфон с поддержкой OTG позволяет использовать внешний микрофон для записи голоса. Просто подключите микрофон к Андроиду через специальный OTG кабель и увеличите качество аудиодорожки в разы.
Как видите, существует множество способов использования OTG функции на Андроид, которые расширят возможности вашего мобильного устройства. Если я что-то упустил, пишите. Расширим список применения интерфейса с OTG вместе!
Источник
Usb host android как включить
Когда устройство на базе Android работает в режиме USB host, оно становится главным устройством на шине USB, подает питание на шину, и производит энумерацию для подключенных к шине устройств USB. Режим хоста USB поддерживается в Android 3.1 и более новых версиях. Непонятные термины касательно шины USB см. в USB in a NutShell [2] (на русском языке), а непонятные термины и сокращения, касающиеся Androd, в Словарике [5].
[Обзор API]
Чтобы разобраться в режиме USB host для Android, важно понимать, с какими классами устройств USB Вам предстоит работать. В следующей таблице описаны классы USB host API в пакете android.hardware.usb.
Таблица 1. USB Host API.
Класс | Описание |
---|---|
UsbManager | Позволяет Вам производить энумерацию подключенных устройств USB и организовать обмен с ними. |
UsbDevice | Представляет подключенное устройство USB, и содержит методы для доступа к идентификационной информации, интерфейсам и конечным точкам. |
UsbInterface | Представляет интерфейс устройства USB определяющий набор функционала устройства. Устройство может иметь один или большее количество интерфейсов, с которыми можно взаимодействовать. |
UsbEndpoint | Представляет конечную точку интерфейса (interface endpoint), которая дает канал связи для этого интерфейса. Интерфейс может иметь 1 или большее количество конечных точек, и обычно имеет отдельно конечную точку для ввода и отдельно конечную точку для вывода, чтобы можно было вести обмен данными в двух направлениях. |
UsbDeviceConnection | Представляет соединение с устройством, которое переносит данные между Android и конечными точками. Этот класс позволяет Вам отправить блок данных туда и обратно, синхронно или асинхронно. |
UsbRequest | Представляет асинхронный запрос для обмена с устройством через UsbDeviceConnection . |
UsbConstants | Определяет константы USB, соответствующие определениям в linux/usb/ch9.h ядра Linux. |
В большинстве ситуаций Вам нужно использовать все эти классы (UsbRequest требуется только если Вы осуществляете асинхронную связь), когда происходит взаимодействие с устройством USB device. Обычно Вы задействуете UsbManager для получения доступа к нужному UsbDevice. Когда Вы получили устройство USB, то для обмена данными нужно найти подходящий интерфейс UsbInterface и конечную точку UsbEndpoint на этом интерфейсе. Как только Вы получили правильную конечную точку, откройте соединение UsbDeviceConnection для обмена данными с устройством USB.
[Требования к Android Manifest]
Следующий список описывает, что Вам нужно добавить в манифест приложения перед тем, как начать работать с USB host API:
• Поскольку не все устройства на базе Android гарантированно поддерживают USB host API, включите элемент , который декларирует, что Ваше приложение использует фичу android.hardware.usb.host .
• Установите минимальный уровень SDK приложение на API Level 12 или более высокий, потому что USB host API не представлены в более старых уровнях API.
• Если Вы хотите, чтобы Ваше приложение получало оповещение о подключенных к шине USB устройствах, укажите пару элементов и для intent android.hardware.usb.action.USB_DEVICE_ATTACHED в главной активности приложения. Элемент указывает на внешний XML-файл ресурса, в котором указана идентификационная информация об устройстве, подключение которого нужно детектировать.
В XML-файле ресурсов продекларируйте элементы для устройств USB, которые хотите отфильтровать. Следующий список описывает атрибуты элемента . Обычно указываются идентификаторы вендора (vendor ID, VID) и продукта (product ID, PID), если хотите фильтровать специфическое устройство, и используется class, subclass и protocol, если хотите фильтровать группы (классы) устройств USB, такие как устройства хранения (mass storage devices, MSD) или цифровые камеры. Вы можете не указывать ни одного из этих атрибутов, в этом случае фильтрация подойдет под любое устройство USB, не только то, что Вам нужно. Вот имена атрибутов для устройств USB:
vendor-id
product-id
class
subclass
protocol (device или interface)
Сохраните XML-файл ресурсов в директории res/xml/ . Имя файла ресурса (без расширения .xml) должно быть то же самое, как указано в элементе . Формат файла ресурса XML показан в примере ниже (пример манифеста и соответствующего ему файла ресурсов):
В этом случае следующий файл ресурсов будет сохранен в файл res/xml/device_filter.xml (здесь указано, что должно фильтроваться любое устройство USB с указанными параметрами):
Примечание: указанные здесь в текстовом виде значения VID (vendor-id) и PID (product-id) должны быть не в шестнадцатеричном виде, а в десятичном. Таким образом, если например у Вас VID=0x16C0, PID=0x05DF, то вы должны преобразовать эти шестнадцатеричные значения в десятичные, и их в текстовом виде указать в XML:
VID 0x16C0 -> 5824
PID 0x05DF -> 1503
Если необходимо, чтобы под фильтр попадали все без исключения подключаемые устройства USB, то просто удалите из элемента usb-device его атрибуты:
[Как работать с устройствами USB, подключенными к Android]
Когда пользователи подключают устройства USB к Android, то система Android может определить интересно ли подключенное устройство USB для Вашего приложения. Если это так, то Вы можете установить обмен с устройством, если это нужно. Для этого приложение должно выполнить:
1. Определение подключенных устройств USB, используя intent фильтр для оповещения о ситуациях, когда пользователь подключает устройство USB, или путем энумерации устройств USB, которые уже подключены.
2. Запросить у пользователя разрешение на подключение к устройству USB, если оно еще не получено.
3. Далее можно осуществлять взаимодействие с устройством USB путем чтения и записи данных через соответствующие конечные точки интерфейса (interface endpoints).
[Определение наличия подключенного устройства USB]
Ваше приложение может распознать устройства USB либо с помощью использования intent-фильтра, который будет оповещать подключение пользователем устройств, либо путем энумерации устройств USB, которые уже подключены. Использование фильтра intent полезно, если Вы хотите иметь в приложении возможность автоматического детектирования (подключения) нужного устройства. Энумерация подключенных устройств USB полезна, если Вы хотите получить список всех подключенных устройств, или если Ваше приложение не делает фильтр для intent.
Использование intent filter
Чтобы приложение могло обнаружить какое-то отдельное устройство USB, Вы можете указать intent filter, чтобы фильтровать android.hardware.usb.action.USB_DEVICE_ATTACHED intent. Вместе с этим intent filter Вам нужно указать файл ресурса, который задает свойства устройства USB, такие как VID и/или PID. Когда пользователь подключает устройство, которое подходит под условие фильтра устройства, система представляет диалог, запрашивающий у пользователя, хочет ли он запустить Вашу программу. Если пользователь подтвердит запуск, то Ваше приложение автоматически будет иметь право на доступ (permission access) к устройству, пока устройство не будет отключено.
В следующем примере показано, как декларировать intent filter:
Следующий пример показывает, как декларировать соответствующий файл ресурса, который указывает интересующие Вас устройства USB:
В activity приложения Вы можете получить объект UsbDevice, который представляет подключенное устройство USB из intent примерно так:
Энумерация устройств
Если Ваше приложение нуждается в инспекции всех устройств USB, уже подключенных во время работы приложения, то оно может произвести энумерацию устройств на шине USB. Используйте метод getDeviceList() для получения карты всех устройств USB (hash map), которые сейчас подключены. В списке hash map есть имена устройств USB, которые Вы можете использовать для получения доступа к устройству.
Если необходимо, Вы также можете просто получить итератор из hash map и обработать каждое устройство друг за другом:
[Получение права на взаимодействие с устройством USB]
Перед тем, как начать обмен с устройством USB, Ваше приложение должно запросить на это разрешение от пользователя.
Примечание: если Ваше приложение использует intent filter, чтобы распознать подключенные устройства USB, то оно автоматически принимает разрешение, если пользователь разрешает разрешает Вашему приложению обработать intent. Если нет, то Вы должны в приложении явным образом запросить разрешение перед подключением к устройству.
Явный запрос на разрешение может быть необходим в некоторых ситуациях, таких как если Ваше приложение делает энумерацию уже подключенных устройств USB, и затем хочет обмениваться данными с ними. Вы должны проверить право на доступ к устройству, перед тем как сделать попытку взаимодействовать с ним. Если этого не сделать, то Вы получите runtime error (ошибка во время выполнения), когда пользователь не дал разрешения на доступ к устройству.
Чтобы явно получить разрешение, создайте сначала broadcast receiver (широковещательный приемник). Этот receiver прослушивает intent, которое получает broadcast, когда Вы вызываете requestPermission(). Вызов requestPermission() отображает диалог для пользователя с запросом разрешения на подключение к устройству USB. В следующем примере кода показано, как создать broadcast receiver:
Для того, чтобы зарегистрировать broadcast receiver, добавьте в метод onCreate() Вашей activity следующий код:
Чтобы отобразить диалог, запрашивающий у пользователей разрешение на подключение к устройству, вызовите метод requestPermission():
Когда пользователь ответит на этот диалог, Ваш broadcast receiver получит intent, который содержит расширение EXTRA_PERMISSION_GRANTED, представляющее суть ответа в двоичном виде. Проверьте его на значение true перед тем, как подключиться к устройству.
[Обмен с устройством USB]
Обмен с устройством USB может быть либо синхронным, либо асинхронным. В любом случае Вы должны создать новый поток, который будет обрабатывать все перемещения данных, чтобы не блокировать на ожидании поток интерфейса (UI thread). Чтобы правильно установить обмен с устройством, Вам нужно получить соответствующие объекты UsbInterface и UsbEndpoint устройства, с которым Вы хотите наладить обмен, и отправлять запросы в эти конечные точки с помощью UsbDeviceConnection . В общем случае Ваш код должен делать следующее:
• Нужно проверить атрибуты объекта UsbDevice , такие как product ID (идентификатор продукта, PID), vendor ID (идентификатор производителя, VID), или класс устройства — чтобы определить, хотите ли Вы соединиться именно с этим устройством USB.
• Когда принято положительное решение на обмен с этим устройством USB, найдите подходящий UsbInterface (), который Вы хотите использовать для обмена с подходящей UsbEndpoint интерфейса (конечные точки и их привязка к интерфейсу также задана в дескрипторах USB).
Прим. переводчика: интерфейс — это некая логическая сущность, описывающая метод взаимодействия с устройством USB. И интерфейсу привязаны конечные точки — другая логическая сущность, олицетворяющая какой-то буфер данных в устройстве USB. Наличие конкретного интерфейса (он обычно в устройстве USB один, но интерфейсом может быть и несколько), его тип, привязка к интерфейсу конечных точек, тип конечных точек — все это зависит от дескрипторов устройства USB (подробнее см. [2]). Дескрипторы устройств USB автоматически считываются системой Android при энумерации и подключении устройств USB.
Интерфейсу может принадлежать одна или большее количество конечных точек (endpoint). Обычно для осуществления двунаправленного обмена имеются 2 конечные точки — одна конечная точка работает на ввод от устройства (IN endpoint), а другая на вывод в устройство (OUT endpoint).
• Когда Вы нашли корректную конечную точку, откройте UsbDeviceConnection к этой конечной точке.
• Предоставьте данные, которые Вы хотите передать в конечную точку методами bulkTransfer() или controlTransfer() . Вы должны провести эту операцию передачи данных в другом потоке, чтобы не блокировать главный поток интерфейса пользователя (main UI thread). Для дополнительной информации по использованию потоков в Android см. [3].
Следующий кусок кода показывает тривиальный способ осуществить синхронную передачу данных. Ваш реальный рабочий код должен содержать больше логики, чтобы корректно найти нужный интерфейс и конечные точки для обмена, и также должен передавать данные в отдельном потоке (чтобы не блокировать main UI thread, и чтобы приложение визуально не тормозило [4]):
Чтобы отправить данные асинхронно (без ожидания), используйте класс UsbRequest для инициализации очереди на асинхронном запросе, и затем ждите результата с помощью вызова requestWait() .
Для дополнительной информации см. пример AdbTest, который показывает как делать асинхронные bulk передачи, и пример MissleLauncher, который показывает как асинхронно слушать interrupt endpoint.
[Прекращение обмена с устройством USB]
Когда Вы завершили обмен с устройством USB, или устройство USB было отключено, закройте UsbInterface и UsbDeviceConnection вызовом releaseInterface() и close() . Чтобы прослушивать события отключения, создайте broadcast receiver примерно так:
Создание broadcast receiver в приложении, не в манифесте, позволит Вашему приложению во время выполнения обрабатывать только события отключения. С таким методом события отключения будут отправлены только приложению, которое сейчас работает, и не всем приложениям.
Источник