- Работа с устройствами USB в Android
- Права доступа
- Принтеры
- Преобразователи USB-Serial
- Резюме
- Что такое и как работает функция OTG на устройствах Android
- Что это такое?
- Какие устройства можно подключать через OTG?
- Какие смартфоны поддерживают технологию?
- Как проверить, поддерживает ли мой смартфон эту функцию?
- Как отключить юсб накопитель на Андроиде
- Что такое режим MTP и куда делся режим USB
- MTP — медиаустройство
- Описание:
- Вариант №1 Ваш девайс с версией ОС Android от 2.1 до 2.3.7:
- Вариант №2 Вы обладатель устройства на Android с версией выше 4.0:
Работа с устройствами USB в Android
В недавней статье на Geektimes в комментариях возник вопрос о поддержке в ОС Android периферии, подключенной к шине USB. Действительно, большинство вендорского ПО, к примеру, для работы с принтерами и МФУ, поддерживает только подключение по сети. Однако это не означает, что в самой ОС Android нет такой возможности — это означает лишь то, что большинство устройств не имеют полноценного USB хоста, и далеко не все имеют поддержку OTG. По сети же могут работать абсолютно все без исключения.
Большинство устройств на Android при наличии порта OTG поддерживают на уровне системы (ядра Linux или стандартных компонентов Android) следующие классы устройств:
- Устройства ввода — клавиатуры, мыши, джойстики (HID)
- Накопители (Mass Storage)
Несколько реже:
- Сотовые модемы
- Сетевые адаптеры
- Вебкамеры
Хабы поддерживаются при наличии полноценных хост-портов, но не поддерживаются на портах OTG.
Подробнее список устройств, поддерживаемых на уровне ядра Linux, можно получить в sysfs:
$ ls /sys/bus/usb/drivers
Если же модуль в принципе доступен в исходниках ядра Linux, но не включен в Android — не стоит рассчитывать на то, что его получится собрать и расставить на все целевые системы.
Однако, начиная с Android 3.1 (API 12), в системе содержатся средства, достаточные для поддержки на уровне приложения любой USB периферии. Данные средства описаны в разделе USB Host руководства по Android API. Здесь же я хочу привести примеры реальной работы с некоторыми видами устройств.
Права доступа
Как и для прочих действий, Android требует, чтобы приложение получило разрешение на доступ к USB периферии. Существует 2 способа получить такое разрешение:
- Задекларировать список устройств в AndroidManifest
- Явно показать пользователю диалог “разрешить”
Поскольку для моих задач лишние вопросы к пользователю были нежелательны, я использовал первый способ.
Итак, нам необходимо добавить в манифест следующее:
А в res/xml/device_filter.xml вписать следующее:
Отмечу, что хотя общепринято указывать VID:PID в 16-ричной системе счисления, здесь они должны быть указаны в десятичной. В документации заявляется, что возможно указание только класса, без VID и PID, но у меня это не стало работать.
Принтеры
На примере принтера я покажу, как непосредственно использовать API android.hardware.usb. На уровне передачи данных все принтеры поддерживают стандартый класс USB устройств:
Класс предельно простой. В рамках этого класса устройство должно поддерживать:
- Обязательный bulk out endpoind для отправки данных на принтер
- Опциональный bulk in endpoind для получения статуса принтера
- 3 управляющих запроса
Код, приведенный ниже, предоставляет функциональность, аналогичную устройству /dev/usb/lp в Linux. Далее нам нужен фильтр, преобразующий исходный документ в пакет данных, понятный конкретной модели принтера. Но это тема иной статьи. Как один из вариантов — можно собрать ghostscript с помощью NDK.
Для работы с устройством нам в первую очередь нужно:
1. Найти устройство. В примере для простоты я ищу первый попавшийся:
2. Получить endpoint’ы:
3. Непосредсвенно открыть устройство:
4. После этого мы можем читать и писать в устройство:
5. По завершении работы — закрыть устройство:
Преобразователи USB-Serial
В отличие от притеров, преобразователи USB-Serial гораздо менее стандартизированы. Существует несколько распространенных чипов, для которых существенно отличается установка параметров последовательного порта — битрейта, чётности и проч. К счастью, есть библиотека github.com/mik3y/usb-serial-for-android, поддерживающая практически все существующие чипы. Библиотека полностью скрывает USB API, сводя все необходимые действия к минимуму вызовов с минимумом параметров.
1. Найти и открыть устройство:
2. Установить параметры последовательного порта:
3. Читать и писать в порт:
4. По завершении работы — закрыть порт:
Резюме
Надеюсь, что мне удалось показать, что работа с USB периферией достаточно проста и логична. Безусловно, реализация протоколов некоторых конкретных устройств не блещет простотой — но это проявится в любой системе в одинаковой степени.
Все приведенные примеры я взял из реального проекта, лишь исключил очевидные проверки, оставив только ключевые строки.
Источник
Что такое и как работает функция OTG на устройствах Android
С каждым годом возможности смартфонов и планшетов Андроид превышают своих предшественников в несколько раз, предоставляя пользователям очень интересные и полезные функции. Теперь вы можете подключить к своему мобильному гаджету разные устройства, как к компьютеру. Такую возможность предоставляет технология OTG (One-The-Go).
Из статьи вы узнаете
Что это такое?
USB OTG — это переходник для вашего смартфона, который подключается к нему через Mini или Micro USB, а с другой стороны расположен USB-порт, в который можно вставлять не только флешки, но и другие типы гаджетов. Например, картридеры, внешние диски, игровые джойстики, клавиатуры и многие другие технические новинки, окружающие нас в повседневной жизни. Таким образом, функция OTG на Android значительно расширяет возможности смартфона, предоставляя пользователю больший спектр применения своего аппарата.
Также часто появляются вопросы о том, почему разработчики девайсов не встраивают отдельный USB-порт, чтобы не использовать сторонние переходники.
- Во-первых, это лишнее место на корпусе телефона. Практически все компании, занимающиеся производством техники, стараются уменьшать толщину корпуса и это огромное преимущество перед конкурентами, поэтому ни один производитель не пойдет на такой шаг.
- Во-вторых, такой порт будет активно потреблять дополнительную энергию, а это сильно бьет по общему расходу заряда батареи.
- В-третьих, на продаже аксессуаров зарабатывают огромные деньги партнеры разработчиков. То есть, в Андроид добавили поддержку USB OTG, побудили интерес к своей технологии, а партнеры предоставили на рынке те самые переходники, которые необходимы для работы. В итоге выигрывают все, даже потребитель!
Какие устройства можно подключать через OTG?
Благодаря этой технологии к телефону могут подключаться практически любые типы устройств. Но это только в теории. На практике же мы видим иную картину. Здесь многое зависит от разработчиков оболочек для конкретной версии операционной системы Андроид, от аппаратов, которые вы подключаете, от совместимости.
Без проблем можно подключать USB-накопители до 32 Гб. Можно попробовать и больше, например, на 64 Гб, но они работают не везде.
Также есть возможность подключения отдельных внешних накопителей, но здесь стоит учесть тот факт, что многим моделям попросту не хватит мощности питания от вашего телефона. Если есть возможность подключить питание через обычную розетку в дополнительном входе, то тогда проблем с передачей и корректным чтением списка файлов не возникнет.
Можно подключать компьютерную мышь, клавиатуру. Это очень полезно в тех случаях, когда пользователю необходимо что-то напечатать, а стандартная виртуальная клавиатура его не устраивает.
Если вы заядлый геймер, то сможете при помощи OTG в телефоне подключить и геймпад. Только учтите, что не все игры из Google Play поддерживают такую технологию и подобные устройства. Здесь многое зависит от самого разработчика приложения.
Присутствует возможность передачи контактов и сообщений через данную технологию, если соединить два устройства через один кабель. Еще можно присоединить лампу, работающую от USB-порта.
Если же у вас плохая фронтальная камера на смартфоне, то просто подключите внешнюю!
Эта технология удобна для фотографов, которые могут через картридер или USB просмотреть фотографии на своем устройстве, например, планшете или смартфоне. Даже можно подключать адаптеры для интернета, чтобы подключаться через оптоволокно!
Но и это еще не все! Нужно срочно распечатать документы? Подключите принтер! Сюда же можно добавить еще и монитор или телевизор.
В итоге пользователь получает полноценное устройство, с помощью которого можно управлять другими девайсами. А если учесть, что мощность некоторых телефонных аппаратов превосходит часть бюджетных компьютеров старых поколений, то в будущем и вовсе можно ожидать полной реализации всей работы с ПК на мобильном устройстве.
Какие смартфоны поддерживают технологию?
Андроид, начиная с версии 2.3, автоматически поддерживает эту технологию. Но здесь важно учесть, что многое зависит от оболочки производителя, который предоставляет смартфон. Android — это разработка Google, предоставляемая всем компаниям, где уже каждая компания дорабатывает ее на свой лад и может, как добавить что-то новое, так и удалить.
Некоторые производители убирают эту опцию лишь затем, чтобы сэкономить заряд батареи, повысив в целом его эффективность. Но на такие шаги идут только ради бюджетных моделей. Средний и высокий классы смартфонов 100% обладают такой технологией и поддерживают большой ассортимент подключаемых устройств.
Как проверить, поддерживает ли мой смартфон эту функцию?
Узнать, есть ли у меня поддержка OTG, можно разными способами.
Источник
Как отключить юсб накопитель на Андроиде
На многих устройствах Android, когда устройство подключено к USB-порту компьютера или даже к некоторым USB-устройствам зарядки, телефон переходит в режим USB-хранения. Когда устройство находится в этом режиме, приложения для Android не могут получить доступ к SD-карте. Есть ли способ (1) обнаружить, когда устройство находится в этом режиме, и (2) программно отключить USB-накопитель, по крайней мере временно, чтобы мое приложение Android могло получить доступ к SD-карте?
На многих устройствах Android, когда устройство подключено к USB-порту компьютера или даже к некоторым USB-устройствам зарядки, телефон переходит в режим USB-хранения. Когда устройство находится в этом режиме, приложения для Android не могут получить доступ к SD-карте. Есть ли способ (1) обнаружить, когда устройство находится в этом режиме, и (2) программно отключить USB-накопитель, по крайней мере временно, чтобы мое приложение Android могло получить доступ к SD-карте?
Я видел другие вопросы SO, и ответов на самом деле недостаточно (например, Android: обнаружение USB).
Чтобы Android подключался к компьютеру как накопитель:
Что такое режим MTP и куда делся режим USB
До версии Android 4.4 KitKat была возможность установить подключение по USB как флешку. ПК видел устройство как съемный диск и предоставлял те же права: пользователь мог переносить файлы, форматировать накопитель и совершать другие действия.
p, blockquote 4,0,0,0,0 —>
Затем в новых версиях Андроид режим USB был заменен на MTP, в котором осталась только функция переноса данных, а то же форматирование не работает.
p, blockquote 5,0,0,0,0 —>
В этом режиме Ваше устройство Android будет работать с приложениями для цифровых камер, которые поддерживают PTP, но не MTP. Apple Mac OS X поддерживает PTP, поэтому Вы можете использовать режим PTP для передачи фотографий с устройства Android на Mac через USB-соединение без какого-либо специального программного обеспечения.
MTP — медиаустройство
MTP расшифровывается как «Media Transfer Protocol». Когда Android использует этот протокол, он представляется компьютеру как «мультимедийное устройство». Протокол передачи мультимедиа широко рекламировался как стандартизированный протокол для передачи аудиофайлов на цифровые музыкальные проигрыватели с использованием Windows Media Player и аналогичных приложений. Он был разработан, чтобы позволить другим компаниям медиаплеера конкурировать с iPod Apple и iTunes.
Android может выбирать файлы, которые он Вам предоставляет, и скрывать системные файлы, чтобы Вы не могли их видеть или изменять. Если Вы попытаетесь удалить или отредактировать файл, который нельзя изменить, устройство отклонит запрос, и Вы увидите сообщение об ошибке.
Вашему компьютеру не требуется эксклюзивный доступ к устройству хранения, поэтому нет необходимости подключать хранилище, отключать его или иметь отдельные разделы для разных типов данных. Android также может использовать ext4 или любую другую файловую систему по своему усмотрению — Windows не должна понимать файловую систему, только Android.
На практике MTP очень похож на USB-накопитель. Например, устройство MTP отображается в проводнике Windows, чтобы Вы могли просматривать и передавать файлы. Linux также поддерживает устройства MTP через libmtp, который обычно входит в состав популярных дистрибутивов Linux. Устройства MTP также должны появиться в файловом менеджере Вашего ПК с Linux.
Apple Mac OS X — это отдельное решение — оно вообще не включает поддержку MTP. Apple iPod, iPhone и iPad используют собственный проприетарный протокол синхронизации вместе с iTunes, так почему же они хотят поддерживать конкурирующий протокол?
Google предоставляет приложение Android File Transfer для Mac OS X. Это приложение является простым MTP-клиентом, поэтому оно будет работать для передачи файлов туда и обратно на Mac. Google не предоставляет это приложение для других операционных систем, поскольку они включают поддержку MTP.
- Подсоединяем устройство к компьютеру посредством USB кабеля;
- Заходим в меню Настройки >>> Память >>> Настройки >>> USB-подключения;
- Тут выбираем способ подключения как медиаустроство;
- Ура! Компьтер видит съемный носитель.
Описание:
Сегодня поговорим о том, как включить USB накопитель на Android девайсе. Кажется нет ничего сложного присоединил устройство к ПК посредством кабеля, но порой у пользователей возникают непредвиденные проблемы. Сегодня рассмотрим примеры и способы решения:
Первый вопрос, это версия мобильной ОС Android, ведь от нее зависит что делаем дальше, если не знаете версию, заходим в настройки и ищем пункт, обычно самый нижний «Об устройстве (телефоне, планшете)«. Смотрите версию Андроид вашего девайса.
Вариант №1 Ваш девайс с версией ОС Android от 2.1 до 2.3.7:
- Подсоединяем гаджет к ПК посредством USB кабеля;
- Подождите, компьютер должен обнаружить новое устройство; (Если все прошло успешно, то следующий шаг пропускаем);
- Если компьютер не увидел устройство, отключаем его от ПК. Заходим в меню Настройки >>> Приложения >>> Для разработчика >>> Отладка по USB. Активируем пункт включения отладки по USB. Начинаем с первого пункта;
- Далее на гаджете появится значок USB в строке событий. Тянем вниз и нажимаем «Подключение по USB«;
- Возможно смартфонпланшет Вам предложит выбрать способ подключения (MTP) «Подключить как медиаустройств» или (PTP) «Подключить как камеру», нас интересует первый способ;
- Ура! Наше устройство отобразилось на компьютере как съемный диск.
Вариант №2 Вы обладатель устройства на Android с версией выше 4.0:
В таком случае в 90% случаев компьютер автоматически распознает устройство, но бывают и редкие исключения, тогда:
- Подсоединяем устройство к компьютеру посредством USB кабеля;
- Заходим в меню Настройки >>> Память >>> Настройки >>> USB-подключения;
- Тут выбираем способ подключения как медиаустроство;
- Ура! Компьтер видит съемный носитель.
Вот в принципе и все, так Вы подключите любое Android устройство к ПК через USB-кабель;
Внимание, перечисленные далее шаги могут повредить вашему смартфону, поэтому все шаги вы выполняете только на свой страх и риск, при наличии острой необходимости!
Но бывают ситуации, когда при подключении данное меню не появляется или появляется,но при этом требуется каждый раз выбирать нужный режим (в то время как на ранних версиях, вариант можно было выставить по умолчанию).
Внимание, перечисленные далее шаги могут повредить вашему смартфону, поэтому все шаги вы выполняете только на свой страх и риск, при наличии острой необходимости!
Для этого нам необходимо включить режим разработчика, и попробовать выставить режим работы USB как «Передача файлов» или установить какой-то из нужных вам режимов по умолчанию.
Опускаем шторку с меню быстрого доступа, в правом углу находим иконку шестеренки — нажимаем. Этот шаг переместит нас в настройки смартфона.
(1.) В меню находим и нажимаем на пункт «О телефоне». (2.) Далее находим пункт «Версия MIUI» и нажимаем на него 5 раз. При каждом нажатии, система будет показывать счетчик оставшихся нажатий, до включения режима разработчика.
Если все выполнено правильно, появится уведомление о том, что «режим разработчика включен». Теперь нам необходимо вернуться в главное меню настроек. (3.) Затем прокручиваем меню до пункта «Расширенные настройки», входим в него. (4.) В открывшемся списке доходим до пункта «Для разработчиков», который появился после наших манипуляций на шаге (2.), входим в этот пункт.
Внимание: войдя в раздел разработчиков постарайтесь без необходимости ничего там не менять.
(5.) Находим пункт «Конфигурация USB по умолчанию» и входим в него. (6.) Включаем нужный вам режим работы принудительно (данный выбор так же включит выбор по умолчанию).
ПОРЯДОК ВКЛЮЧЕНИЯ РЕЖИМА USB НАКОПИТЕЛЯ ДЛЯ MIUI 12
*изображения кликабельны
*изображения кликабельны
Теоретически все должно заработать. Если не помогло, дальнейшие вариации могут варьироваться от проблем с драйверами на ПК, до поврежденного шнура (или не поддерживающего передачу данных) до проблем с самим портом USB или проблем прошивкой и гадать можно долго. Выше всего лишь один из вариантов решения данной проблемы.
Иногда проблему с пропаданием меню выбора способа подключения к ПК, может вызвать приложение superSU, которое блокирует меню в выпадающей шторке. Упоминания об этой особенности неоднократно встречаются в различных обсуждениях на форумах посвященных как Xiaomi, MIUI та к и проблемам подключения и обсуждениях различных способов получения ROOT прав на устройстве.
Обычная карта памяти, которая используется в вашем мобильном аппарате, может стать накопителем, нужно только знать, как включить USB хранилище на Android. Обозначенная задача звучит несколько пугающе для несведущего человека. А на самом деле пугаться совершенно нечего. Для ее выполнения вам понадобятся:
Обычная карта памяти, которая используется в вашем мобильном аппарате, может стать накопителем, нужно только знать, как включить USB хранилище на Android. Обозначенная задача звучит несколько пугающе для несведущего человека. А на самом деле пугаться совершенно нечего. Для ее выполнения вам понадобятся:
- Мобильное устройство, работающее на базе операционной системы андроид;
- Компьютер с USB-портом;
- USB-кабель, который поставляется в комплекте с гаджетом.
Теперь можно переходить к самому процессу включения юсб хранилища.
Чтобы подключить внешний USB-накопитель к мобильнику убедитесь, что телефон поддерживает технологию USB-OTG. Узнать эту информацию можно из инструкции пользователя или на сайте производителя. Например Huawei Y6 2018, предоставленный для эксперимента магазином MOYO, поддерживает USB-OTG.
Для смартфона USB-накопитель является еще одним диском в дополнение к встроенной флэш-памяти и microSD
Чтобы подключить внешний USB-накопитель к мобильнику убедитесь, что телефон поддерживает технологию USB-OTG. Узнать эту информацию можно из инструкции пользователя или на сайте производителя. Например Huawei Y6 2018, предоставленный для эксперимента магазином MOYO, поддерживает USB-OTG.
Для подключения USB-накопителя нужно иметь кабель USB-OTG. Это адаптер с разъема microUSB на USB-A и USB Type C на USB-A. Вам нужен адаптер с разъемом как у вашего телефона. В Huawei Y6 2018 это microUSB. Также продаются накопители и кардридеры microSD, которые уже имеют встроенный разъем microUSB или USB-Type C.
Разблокируйте телефон и подключите к нему USB-накопитель. Раскройте шторку панели уведомлений, где должно появиться уведомление о доступности нового накопителя. Здесь можно видеть несколько опций: просмотреть содержимое диска или безопасно его отсоединить.
Для смартфона USB-накопитель является еще одним диском в дополнение к встроенной флэш-памяти и microSD. Работать с ним можно как обычно через любой файловый менеджер.
And adding the below line in the application section inside the manifest.
I have read many posts on this topic, but I have not found a solution yet. In my application I need to unmount the USB DRIVE after copying files from USB DRIVE to the tablet, so I can safely remove it without using the Settings menu.
Right now I am using this method:
What I get in the storage settings is:
but SD is still mounted.
Thank you in advance for your help.
Someone know how use IMountService? I read about it, and maybe is the right way to solve the unmount of USB DRIVE, but after adding classes-full-debug.jar my project is no longer compiled
Создан 16 июл. 14 2014-07-16 14:24:17 matzrm
2 ответа
this cannot be done. Many users store all their content like songs, videos, photos there. it was a good security decision to not allow apps to unmount SD card, but use them to store data.
but u can send user to setting and user do it , not by code
i think this will work
Создан 16 июл. 14 2014-07-16 14:42:15 Saeed-rz
In my case, it is not SD, but a USB DRIVE used to auto-update the configuration of my application. There isn’t an API to do unmount? @Leon_SFS – matzrm 16 июл. 14 2014-07-16 14:50:06
@user2704214 look at this : http://developer.android.com/guide/topics/connectivity/usb/accessory.html maybe helpful and are u use right permission for unMount? – Saeed-rz 16 июл. 14 2014-07-16 15:03:26
This is what i had to do on Android 6.0.1, hopefully it will be the same for 4.2.
I had to add the library SDK/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes-full-debug.jar to my app after compiling android. (I just downloaded the lollipop version from here and thankfully it worked for marshmallow as well)
Android studio will complain about an out of memory error, this is fixed by adding the below code to the build.gradle inside the android section.
You also need to add multidex support by adding the below lines in build.gradle inside the defaultConfig section.
And adding the below line inside the dependencies section.
And adding the below line in the application section inside the manifest.
And your apk has to be in the /system/priv-app directory and have the below permission.
and then the below code should work.
Создан 30 сен. 16 2016-09-30 13:32:06 Habbert
Источник