Программирование USB в Android. Используем для связи интерфейс USB
рис.1 Иллюстрация работы Android устройства в режимах USB Host и Accessory (рисунок с сайта http://developer.android.com)
Отметим, что использование USB - не единственный способ связи с тем же самодельным устройством. Android позволяет использовать еще , NFC, Wi-Fi P2P, SIP, а также стандартное сетевое подключение . Так что в арсенале разработчика достаточно возможностей для осуществления своих самых смелых замыслов.
Другим распространенным вариантом связи с различными устройствами до сих пор является использование переходника USB-COM. Материал в сети по применению переходника USB-COM в Android есть - см., например, . Популярность такого подключения обусловлена наличием большого количества уже разработанных с использованием различных микроконтроллеров устройств, связь с которыми осуществляется с помощью COM-порта (последовательного порта), что лет 10 назад являлось почти стандартным способом передать данные от компьютера к самодельной «железке».
В сравнении с COM-портом, использование USB позволяет существенно повысить скорость передачи данных и сделать этот процесс удобным для пользователя. Cкорость передачи, которая даже в случае низкоскоростных устройств (клавиатуры, мыши, джойстики), составляет 10-1500 Кбит/c, простота и невысокая стоимость кабельной системы и подключений, самоидентификация устройств с автоматическим конфигурированием, скрытие подробностей электрического подключения от конечного пользователя (плюс возможность отключения кабеля без выключения устройств), контроль ошибок и их восстановление на уровне протокола - вот неоспоримые преимущества данной технологии (см. , с.12).
Вообще, говоря об использовании USB для передачи данных, нелишним будет упомянуть книгу П.Агурова «Интерфейс USB» . Она, хотя часто критикуется в сети и выпущена последний раз в 2006 году, не раз помогла найти верное решение при поиске информации по различным аспектам применения этой технологии. В книге рассмотрены вопросы: от выбора микросхемы и схемотехники для контроллера до написания программы микроконтроллера и примеров программирования передачи данных по протоколу USB со стороны компьютера. Нельзя не указать и "первоисточник" данных по этому вопросу - сайт некоммерческой организации USB IF (USB Implementers Forum), занимающейся разработкой спецификаций этого интерфейса - , правда данный материал на английском языке. Однако именно там вы найдете исчерпывающие сведения об устройстве интерфейса USB. Есть неплохой перевод частей спецификации - . Интересующимся программными решениями со стороны микроконтроллера также можно посмотреть ссылку .
Данная статья адресована прежде всего тем, у кого есть какое-либо электронное устройство (разработанное самостоятельно или кем-то еще), протокол обмена данными с которым хорошо известен (например, уже есть программа, работающая с этим устройством в Windows/Linux) и хотелось бы иметь программу, работающую с ним в Android.
Немного о классах USB-устройств
Необходимо отметить, что разработка программного обеспечения для обмена данными с конкретным устройством сильно зависит от его реализации на уровне микроконтроллера. Привести примеры программ связи для всех типов USB-устройств в рамках одной статьи, по понятным причинам, невозможно (начальные сведения о программировании различных типов устройств можно почерпнуть в ). Однако, мы ограничимся тем, что приведем код, реализующий поиск устройства и доступ к его контрольным точкам для обмена информацией. Также разберем отправку данных на примере одного из типов USB-устройств, а именно, класса устройств HID (human interface device - класс устройств для взаимодействия с человеком). Этот класс включает в себя «медленные» устройства, такие как клавиатура, мышь, джойстик и примеров его реализации с помощью различных микроконтроллеров в сети достаточно (есть, например, и в ).
Почему именно класс HID так полюбился изготовителям различных самодельных устройств? Процитируем Википедию : «Помимо детальных спецификаций классических устройств ввода (типа клавиатур и мышек) стандарт HID определяет особый класс устройств без детальных спецификаций. Этот класс именуется USB HID Consumer Control и представляет собой по сути нерегламентированный канал связи с устройством. При этом устройство пользуется теми же стандартными для операционной системы драйверами что и мышка с клавиатурой. Таким образом, можно создать USB устройство которое не требует создания и инсталляции специальных драйверов в большинстве распространенных компьютерных операционных систем». Остается добавить только, что работает эта спецификация и в ОС Android (не исключая прошивок CyanogenMod).
Одним из вариантов обмена данными с HID-устройством является передача по прерываниям (interrupt transfer), которая используется в том случае, когда необходимо передать пакеты данных небольшого размера (максимальный размер пакета зависит от скорости передачи и составляет от 64 до 1024 байт) через заданный временной интервал. Пакет для передачи называется репортом (англ. - report, см. с.71, 95). Такой длины репорта обычно вполне хватает для обмена информацией с самодельным устройством, 64 байта информации в одном пакете, например, - это довольно много для контроллера, ведь для передачи состояний светодиода или простейшего датчика достаточно 1 бита информации.
Необходимые инструменты
Итак, нам понадобятся - планшет или телефон с Android версии не ниже 3.1. Здесь необходимо отметить, что вышеуказанный USB Host API полностью реализован не на всех мобильных устройствах (об этом упоминается и на сайте developer.android.com, см. ссылку ). В некоторых планшетах/телефонах разъем USB используется только для зарядки и связи с персональным компьютером. Еще раз отправлю читателя к списку мобильных устройств, пригодных или непригодных для наших опытов (см. ).
Понадобится также какое-либо USB-устройство (для первых опытов будет достаточно обычного USB-флеш-накопителя), переходник OTG (On-The-Go - см. рис. 2) и/или шнур USB для связи с устройством. В Википедии по поводу OTG говорится: «При подключении через USB OTG ранг устройства (ведущий или ведомый) определяется наличием или отсутствием перемычки между контактами 4 и 5 в штекере соединительного кабеля. В USB OTG кабеле такая перемычка устанавливается лишь в одном из двух разъемов (см. ).» Соответственно, нам необходима такая перемычка со стороны мобильного устройства.
Рис.2 Различия в схеме обычного USB-кабеля и OTG-кабеля (рисунок с сайта http://tech.firstpost.com)
Такой OTG-кабель для Вашего устройства можно спаять и самостоятельно. Для этого необходимо купить в радиомагазине подходящий разъем, плюс автор, например, использовал старый кабель от переносного жесткого диска:
Неплохим подспорьем в работе будет также программа USB Device Info, установленная из хранилища Google Play Market. Программа умеет определять подключенные к USB-разъему планшета/телефона устройства как с помощью Java API так и с помощью ядра Linux. То есть, если Ваше устройство не определилось с помощью Java USB Host API в USB Device Info, то, с большой вероятностью, тщетно будет использовать для этого мобильного устройства какую-либо (в том числе и свою) Android-программу, написанную с помощью Java и USB Host API.
Иногда, также, очень полезной бывает информация, выводимая командой lsusb операционной системы Linux. С ключами -v и -d lsusb выводит о USB-устройстве все, или почти все, что необходимо разработчику программного обеспечения для устройств этого класса (см. рис.3).
Рис.3 Пример вывода команд lsusb и lsusb -v -d
Далее, необходим компьютер с установленным Android SDK и интегрированной средой разработки (IDE) Eclipse с плагином ADT (хотя можно обойтись и только SDK). Как создать и установить приложение для Android можно посмотреть, например, в , или в сети Интернет.
Ну и, конечно, необходимо хотя бы а также желание добиться результата, без него никак! Отмечу, что на выяснение некоторых технических вопросов применения USB в Android автором, потребовались недели кропотливого поиска информации.
Классы Java для работы с USB в Android API
Итак, как говорится на сайте разработчиков USB Host API для Android (см. ) - «прежде чем начать, важно понять какие классы вы будете использовать в работе». В таблице 1 приведено описание важнейших классов для работы с USB Host API (попытка перевода информации с http://developer.android.com).
Таблица 1. Описание классов для работы с USB в Android
Название класса | Описание |
---|---|
UsbManager | Allows you to enumerate and communicate with connected USB devices. Позволяет определять подключенное USB-устройство и обмениваться с ним данными. |
UsbDevice | Represents a connected USB device and contains methods to access its identifying information, interfaces, and endpoints. Представляет подключенное USB-устройство и содержит методы для доступа к его идентификационной информации, интерфейсам, и конечным точкам. |
UsbInterface | Represents an interface of a USB device, which defines a set of functionality for the device. A device can have one or more interfaces on which to communicate on. Представляет «интерфейс» USB-устройства, который определяет набор функций для данного устройства. Одно устройство может иметь один или несколько интерфейсов для обмена информацией. |
UsbEndpoint | Represents an interface endpoint, which is a communication channel for this interface. An interface can have one or more endpoints, and usually has input and output endpoints for two-way communication with the device. Представляет «конечную точку» интерфейса, которая и является каналом связи для этого интерфейса. Интерфейс может иметь одну и более конечных точек, и обычно имеет конечные точки для получения информации и для ее передачи. |
UsbDeviceConnection | Represents a connection to the device, which transfers data on endpoints. This class allows you to send data back and forth sychronously or asynchronously. Представляет «подключение» к данному устройству. Необходимо для передачи данных в конечную точку. Этот класс позволяет получать данные или передавать синхронно или асинхронно. |
UsbRequest | Represents an asynchronous request to communicate with a device through a UsbDeviceConnection. Представляет асинхронный запрос на обмен данными с устройством через UsbDeviceConnection. |
UsbConstants | Defines USB constants that correspond to definitions in linux/usb/ch9.h of the Linux kernel.. Определяет константы, которые соответствуют определениям в linux/usb/ch9.h ядра Linux. |
Практически во всех случаях применения USB Host API программист использует эти классы в своей работе. Алгоритм их применения выглядит примерно так: определяем устройства (цель - программный доступ к классу UsbDevice), подключенные к хосту (мобильному устройству), с помощью UsbManager. Когда программный доступ устройству получен, необходимо определить соответствующие UsbInterface и UsbEndpoint для общения с ним. Как только вы получили в свое распоряжение конечную точку, откройте UsbDeviceConnection, чтобы общаться с USB-устройством. Если конечная точка работает в режиме асинхронной передачи, используем класс UsbRequest.
Давайте попробуем со всем этим разобраться создав простое приложение, которое, используя этот API, определит подключенное к хосту с ОС Android устройство и выведет о нем некоторую информацию на экран телефона или планшета.
Создаем проект
В Eclipse проект создается с помощью пунктов меню File->New->Android Application Project. Заметим также, что код, приведенный ниже заимствован из приложений-примеров, поставляемых с Android SDK (папка android sdk samples/android-N(API Level)/USB) речь идет о программе управления USB-игрушкой Missile Launcher (см. рис. 4) Примеры приложений загружаются через Android SDK Manager (нужно отметить пункт - Samples for SDK ). В листингах, приведенных ниже, примеры кода снабжены комментариями, которые объясняют суть происходяшего.
Рис.4 Забавная игрушка "Ракетозапускалка"
Создавая проект не забудьте отметить нужный API Level в опции Minimum Requared SDK (API Level 12, соответствующий версии Android 3.1 /Honeycomb/, или выше). В проекте будет очень простой интерфейс пользователя - главное окно (Activity) и TextView для вывода информации. Подобный проект подробно рассмотрен в .
В созданном автоматически классе для Activity нашего проекта необходимо определить следующие экземпляры классов для работы с USB:
private
TextView lgView;
private
UsbManager mUsbManager;
private
UsbDevice mDevice;
private
UsbDeviceConnection mConnection;
private
UsbEndpoint mEndpointIntr;
LgView = (TextView) findViewById(R.id .logTextView ) ;
и получаем доступ к классу UsbManager
MUsbManager = (UsbManager) getSystemService(Context .USB_SERVICE ) ;
Создадим еще обработчик события onResume(). Добьемся цели - чтобы информация о подключенных устройствах обновлялась при активизации окна нашего приложения (см. Листинг 1).
Листинг 1. Обработчик события onResume()
public
void
onResume()
{
super
.onResume
()
;
//заполняем контейнер списком устройств
HashMap<
String
, UsbDevice>
deviceList =
mUsbManager.getDeviceList
()
;
Iterator<
UsbDevice>
deviceIterator =
deviceList.values
()
.iterator
()
;
lgView.setText ( "Devices Count:" + deviceList.size () ) ;
while
(deviceIterator.hasNext
()
)
{
UsbDevice device =
(UsbDevice)
deviceIterator.next
()
;
//пример определения ProductID устройства
\n
"
+
"Device ProductID: "
+
device.getProductId
()
)
;
}
//определяем намерение, описанное в фильтре
// намерений AndroidManifest.xml
Intent intent =
getIntent()
;
lgView.setText
( lgView.getText
()
+
"\n
"
+
"intent: "
+
intent)
;
String
action =
intent.getAction
()
;
//если устройство подключено, передаем ссылку в
//в функцию setDevice()
UsbDevice device =
(UsbDevice)
intent.getParcelableExtra
(UsbManager.EXTRA_DEVICE
)
;
if
(UsbManager.ACTION_USB_DEVICE_ATTACHED
.equals
(action)
)
{
setDevice(device)
;
lgView.setText
( lgView.getText
()
+
"\n
"
+
"UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action) is TRUE"
)
;
}
else
if
(UsbManager.ACTION_USB_DEVICE_DETACHED
.equals
(action)
)
{
if
(mDevice !=
null
&&
mDevice.equals
(device)
)
{
setDevice(null
)
;
lgView.setText
( lgView.getText
()
+
"\n
"
+
"UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action) is TRUE"
)
;
}
}
Далее, для Activity создадим функцию setDevice(), необходимую для работы с нашим устройством (см. Листинг 2). В обработчике onResume() и в функции setDevice() мы в точности выполнили алгоритм применения USB Host API, описанный в предыдущем разделе.
Листинг 2. Функция setDevice()
private
void
setDevice(UsbDevice device)
{
lgView.setText
( lgView.getText
()
+
"\n
"
+
"setDevice "
+
device)
;
//определяем доступные интерфейсы устройства
if
(device.getInterfaceCount
()
!=
1
)
{
LgView.setText
( lgView.getText
()
+
"\n
"
+
"could not find interface"
)
;
return
;
}
UsbInterface intf =
device.getInterface
(0
)
;
//определяем конечные точки устройства
if
(intf.getEndpointCount
()
==
0
)
{
LgView.setText
( lgView.getText
()
+
"\n
"
+
"could not find endpoint"
)
;
return
;
}
else
{
lgView.setText
( lgView.getText
()
+
"\n
"
+
"Endpoints Count: "
+
intf.getEndpointCount
()
)
;
}
UsbEndpoint epIN =
null
;
UsbEndpoint epOUT =
null
;
//ищем конечные точки для передачи по прерываниям
for
(int
i =
0
;
i <
intf.getEndpointCount
()
;
i++
)
{
if
(intf.getEndpoint
(i)
.getType
()
==
UsbConstants.USB_ENDPOINT_XFER_INT
)
{
if
(intf.getEndpoint
(i)
.getDirection
()
==
UsbConstants.USB_DIR_IN
)
{
epIN =
intf.getEndpoint
(i)
;
lgView.setText
( lgView.getText
()
+
"\n
"
+
"IN endpoint: "
+
intf.getEndpoint
(i)
)
;
}
else
{
epOUT =
intf.getEndpoint
(i)
;
lgView.setText
( lgView.getText
()
+
"\n
"
+
"OUT endpoint: "
+
intf.getEndpoint
(i)
)
;
}
}
else
{
lgView.setText
( lgView.getText
()
+
"\n
"
+
"no endpoints for INTERRUPT_TRANSFER"
)
;
}
}
MDevice =
device;
mEndpointIntr =
epOUT;
//открываем устройство для передачи данных
if
(device !=
null
)
{
UsbDeviceConnection connection =
mUsbManager.openDevice
(device)
;
if
(connection !=
null
&&
connection.claimInterface
(intf, true
)
)
{
LgView.setText
( lgView.getText
()
+
"\n
"
+
"open device SUCCESS!"
)
;
mConnection =
connection;
} else {
LgView.setText
( lgView.getText
()
+
"\n
"
+
"open device FAIL!"
)
;
mConnection =
null
;
}
}
}
}
В дополнение к приведенному коду, который, как уже наверняка догадался внимательный читатель, открывает устройство для приема-передачи данных, остается лишь задействовать протокол обмена данными, который, повторюсь, должен быть хорошо известен разработчику. Приведем лишь, как было обещано, код, который отправит HID устройству некоторый пакет данных message используя передачу по прерываниям, класс UsbRequest и соответствующую конечную точку - см. Листинг 3.
Листинг 3. Пример кода для отправки данных устройству
//определение размера буфера для отправки
//исходя из максимального размера пакета
int
bufferDataLength =
mEndpointIntr.getMaxPacketSize
()
;
lgView.setText ( lgView.getText () + "\n " + mEndpointIntr.getMaxPacketSize () ) ;
ByteBuffer buffer = ByteBuffer.allocate (bufferDataLength + 1 ) ;
UsbRequest request = new UsbRequest() ;
buffer.put (message) ;
request.initialize (mConnection, mEndpointIntr) ;
request.queue (buffer, bufferDataLength) ;
if (request.equals (mConnection.requestWait () ) )
//отправка прошла успешно
//lgView.setText(lgView.getText() + "\n" + "sending CLEAR!!!");
catch (Exception ex)
//что-то не так...
//lgView.setText(lgView.getText() + "\n" + "sending not clear...");
Фильтрация устройств в AndroidManifest.xml
Хотя в нашем приложении нет нужды в поиске конкретного устройства с известными VID (Vendor-ID) и PID (Product-ID), инженеры Google не приводят примеров приложений без секции intent-filter в манифест файле, и автору не удалось добиться работы программы без фильтрации устройств в AndroidManifest.xml .
Напомню, что Vendor-ID и Product-ID это уникальные идентификаторы USB-устройств. То есть, используя фильтрацию, можно создать приложение, которое взаимодействует лишь с определенным устройством или каким-то классом устройств. Отметим, что производители устройств должны согласовать эти номера с организацией USB IF.
Приложение, манифест файл которого приведен в листинге 4, а файл с условием фильтрации в листинге 5, например, с успехом распознает подключенные к мобильному устройству USB-флеш-накопители, но не распознает клавиатуру и мыши, имеющиеся у автора. Это приложение вместе с исходным кодом можно скачать по ссылке .
Листинг 4. Файл AndroidManifest.xml
>
package="ru.learn2prog.usbhostexample"
android:versionCode="1"
android:versionName="1.0" >
android:minSdkVersion
="12"
android:targetSdkVersion
="14"
/>
android:allowBackup
="true"
android:icon
="@drawable/ic_launcher"
android:label
="@string/app_name"
android:theme
="@style/AppTheme"
>
android:name
="ru.learn2prog.usbhostexample.MainActivity"
android:label
="@string/app_name"
>
>
android:resource
="@xml/device_filter"
/>
>
>
>
Листинг 5. Файл фильтра device_filter.xml (каталог /res/xml)
Операции по сборке и установке нашего приложения ничем не отличаются от обычных (см. примеры в , ). Хочу обратить внимание на действия фильтра намерений - при подключении устройства к хосту ОС запрашивает пользователя о запуске нашего приложения.
Литература/Ссылки:
11.
12.
13. http://developer.android.com/guide/topics/connectivity/usb/host.html - обзор классов, необходимых для работы с USB в Android
14. ссылка на исходники приложения
Смартфоны и планшеты на Android становятся популярными, функциональность устройств расширяется. Пользователи используют гаджеты для серфинга в интернете, редактирования рабочих документов, просмотра фильмов. И часто возникает необходимость подключить к аппарату на Андроид съёмную флешку. Производители предлагают такую возможность с помощью технологии USB On-The-Go (OTG).
Как подключить с помощью OTG-кабеля
USB OTG - технология, позволяющая передавать на внешние устройства питание через разъем для зарядки смартфона MicroUSB. Технологию поддерживают смартфоны и планшеты с Android 3.1 и выше.
Кабели OTG продаются в компьютерных магазинах и в салонах сотовой связи. Перед тем как покупать шнур, удостоверьтесь, что ваш аппарат поддерживает USB On-The-Go. Для этого загрузите из Play Маркета приложение USB OTG Checker, откройте и нажмите кнопку Check Device OS on USB OTG. Через некоторое время вы увидите результат проверки.
Помимо проверки системы, программа позволяет протестировать уровень сигнала OTG, а также просматривать файлы на подключённом носителе.
OTG кабель представляет собой шнур, на одном конце которого расположен штекер MicroUSB, а на другом - разъем USB, куда подключается флеш-карта. В системе данные с флешки можно отыскать с помощью файлового менеджера.
Если ваш смартфон или планшет поддерживает технологию OTG, но не имеет соответствующего разъёма, воспользуйтесь переходником.
Через MicroUSB разъём
Пользоваться OTG кабелем неудобно в людном месте или на мероприятии, ведь для подключения пользователю нужно найти флеш-накопитель, достать кабель и подсоединить их к смартфону или планшету. Производители предлагают решение проблемы - двухсторонние накопители с разъёмами USB для ПК и MicroUSB для смартфонов и планшетов. Они выглядят, как обычные флешки и работают с технологией OTG.
Видео: подключение флешки к Android
Приложения для корректной работы OTG на смартфоне или планшете
Если вы подключили флешку к смартфону или планшету, а в файловой системе не появилась информация о съёмном диске, вероятно, устройство не поддерживает автоопределение внешних накопителей. Чтобы аппарат мог «видеть» карту памяти, скачайте с Google Play одно из приложений:
- Stick Mount;
- USB OTG Helper;
- Nexus Importer;
- Nexus USB OTG FileManager.
Инструкции по использованию приложений приведены ниже в статье.
Stick Mount
Stick Mount - программа, автоматически монтирующая съёмные диски. Чтобы сработало автоопределение накопителя, установите программу и подключите флешку к смартфону. Вы увидите всплывающее окошко с подтверждением запуска Stick Mount. Нажмите OK. Если окошко не появляется, откройте приложение и нажмите кнопку Mount. В файловом менеджере появится новый раздел «Съёмный диск» (USB Storage).
Для безопасного извлечения карты памяти по окончании работы вновь откройте программу и нажмите Unmount.
Приложение Stick Mount - бесплатное, но требует root доступа. Работает с системами Android версий 4.0 и выше.
Nexus Importer
Nexus Media Importer - программа, изначально разработанная для подключения флеш-накопителей к смартфонам и планшетам Nexus, сегодня поддерживает устройства производителей Samsung, Sony, Motorola, HTC. Инструкция по использованию:
- Установите приложение и подсоедините флешку к гаджету.
- Система откроет окно с вопросом «Открыть Nexus Media Importer при подключении USB-устройства?». Нажмите OK.
- Произойдёт импорт данных, и откроется файловый менеджер, где вы увидите всю информацию, ранее сохранённую на накопителе.
Приложение платное, зато не требует root-доступа. Аналог - Nexus USB OTG FileManager. Некорректно работает на некоторых устройствах с Android 4.3 - автоматически отключает флешку. Чтобы этого не происходило, достаточно сменить язык приложения на английский. В Android 4.4 проблема решена.
Root-права - учётная запись суперпользователя, доступ к которой расширяет функциональность Android-устройства. Использование root-прав лишает владельца смартфона или планшета гарантии.
USB OTG Helper
Приложение работает аналогично предыдущим. Загрузите программу из Маркета Google, установите на смартфон или планшет и подсоедините флешку. Сработает автоопределение, и данные с накопителя отобразятся в менеджере файлов. Программа бесплатная, требует прав Суперпользователя.
Как получить доступ root-права для Андроид
Если вы не хотите приобретать приложения для корректной работы OTG за деньги, воспользуйтесь бесплатными вариантами, предварительно получив root-права. Для получения root-доступа используйте бесплатную программу Kingo Root Android:
- Скачайте приложение с Play Маркета и установите.
- Подключите гаджет к ноутбуку или персональному компьютеру в режиме отладки. Предварительно проверьте настройки аппарата - в разделе «Приложения» должна быть установлена галочка около пункта «Разрешить установку из неизвестных источников».
- На компьютер автоматически будут установлены драйверы для смартфона или планшета.
- В окне программы нажмите кнопку Root.
- Права Суперпользователя будут установлены.
Если процесс установки root-прав не удался, попробуйте использовать приложения-аналоги.
Таблица: проблемы при работе переходника OTG и их решение
Распространённые проблемы, возникающие у пользователей при подключении флеш-накопителей через USB, и решения для каждой приведены в таблице.
Проблема | Решение |
Невозможно найти папку флеш-накопителя. | Установите и откройте менеджер файлов (например, ES Проводник). Пройдите по одному из путей: · /mnt/usb/system_usb · /mnt/sda4/ · /sdcard/usbStorage/xxxx/ |
Планшет или смартфон не определяет флешку, хотя другие подобные устройства находит. | Проблема в недостаточном напряжении, подаваемом на Micro USB порт. Используйте накопители, с которыми работает устройство. Второй вариант - чрезмерно большой объем памяти карты. Используйте накопители меньшего объёма. |
Флешка не определяется из-за некорректного форматирования. | С помощью компьютера отформатируйте накопитель в системе FAT32. Многие устройства не поддерживают NTFS. |
С помощью кабеля OTG к смартфону и планшету на Андроид можно подключить не только флешку, но также принтер и цифровой фотоаппарат. Современные устройства могут работать с клавиатурой, мышью, колонками и джойстиком для игр, выполняя функции полноценного компьютера.
На смартфоне вы не найдете полноценный USB-порт, в который можно вставить флешку. Поэтому подключение USB-флешки к Android приходится выполнять с помощью дополнительного оборудования.
Подключение накопителя
Чтобы телефон мог видеть и открывать устройства, подключенные через USB, у него должна быть поддержка On-The-Go (OTG). Суть технологии в том, что мобильное устройство через USB-разъем подает питание на внешнее оборудование. Функция реализована в Android 3.1 и выше, поэтому прежде чем пытаться подключить флешку к Android, необходимо убедиться, что это вообще возможно. Первым делом проверьте версию ОС:
Чтобы убедиться, что с подключением не будет проблем, установите приложение USB OTG Checker. Эта небольшая программка проверит поддержку OTG и при её наличии выдаст подтверждение. Следующий шаг – покупка специального переходника (стоимость оборудования – от 100 рублей). На смартфоне есть порт microUSB, флэшка физически не сможет в нем поместиться. Поэтому вам необходимо расширить порт за счет OTG-переходника, который можно купить в любом магазине мобильной техники. У некоторых телефонов, как и у планшетов, в комплекте есть «родной» OTG-кабель, так что производители тоже предполагают, что к их устройствам будут подключать внешние накопители и другие USB-устройства.
Сама процедура подключения предельно проста: один конец переходника устанавливается в разъем microUSB на телефоне, а в имеющийся на другом конце порт USB вставляется флеш-накопитель. Сейчас можно найти универсальные флеш-накопители с USB и microUSB, для подключения которых не нужен переходник.
Пока это редкость, но вполне возможно, что со временем порты станут универсальными, и пользователи смогут отказаться от переходников и другого дополнительного оборудования.
Чтобы открыть флешку на планшете или смартфоне, обычно достаточно иметь на устройстве установленный файловый менеджер. Флешка должна быть форматирована в FAT32, данные с NTFS на Android не прочитаются. Это в первую очередь относится к последним моделям смартфонов от Samsung: просто подключите флешку через OTG-переходник и найдите накопитель через любой файловый менеджер. Данные будут находиться в каталоге /sdcard/usbStorage.
Однако не всегда процедура проходит так гладко: даже если устройство поддерживает OTG, вопрос, как открыть подключенную флешку на Андроиде, вызывает затруднения. Проблема заключается в том, что не все мобильные устройства в автоматическом режиме монтируют внешнее оборудование, будь то флешка, фотоаппарат или мышь.
Устранить недостаток можно с помощью платного приложения USB Media Explorer, которое позволяет копировать музыку, видео фотографии, документы с флешек, подключенных к смартфонам Google Nexus и другим устройствам с Android 4.0 и выше.
Недостатка у приложения два: оно платное и корректная работа гарантируется только на телефонах и планшетах Nexus, хотя разработчиками заявлена поддержка других устройств. Из достоинств – поддержка файловой системы NTFS, то есть вам не придется форматировать флешку в FAT32 перед подключением.
Если вы не хотите тратить деньги на приложение для копирования данных, или на ваше устройство в принципе нельзя установить USB Media Explorer из-за отсутствия поддержки модели, то единственным способом получить доступ к данным, записанным на флешке, будет использование прав суперпользователя (root).
Для каждой модели лучше искать собственную отдельную инструкцию по получению прав суперпользователя. Есть и универсальные способы, типа использования программы Kingo Root, но следует учитывать, что получение root-прав – потенциально опасная операция, в результате проведения которой мобильное устройство снимается с гарантии. Кроме того, неправильное выполнение процедуры может повредить систему.
Если на телефоне есть root-права, то можно использовать бесплатное приложение StickMount для обнаружения подключенной флешки на Android.
- Запустите StickMount.
- Подключите флешку к телефону.
- Установите автоматическое открытие StickMount при подключении данного накопителя и дайте приложению права суперпользователя.
Посмотреть и скопировать содержимое флешки после монтирования можно через любой файловый менеджер. Информация будет находиться в каталоге sdcard/usbStorage.
Сегодня огромную роль в нашей жизни играют современные девайсы. Речь не идет о компьютерах или ноутбуках, которые уже начинают понемногу отходить на второй план. Смартфоны и планшеты - портативные компьютеры, которые имеют практически все функции, как и ноутбуки. К сожалению, эти современные девайсы не подходят для офисной работы. Набрать текст на планшете довольно сложно, не говоря уже об обычных телефонах.
Люди начали задумываться, как подключить флешку к смартфону "Андроид" или клавиатуру, мышку и другие полезные устройства. Оказывается, это можно сделать. Однако не все знают, как подключить дополнительное устройство к своему смартфону. Давайте это рассмотрим на примере обычной флешки. Как правило, именно это устройство многие люди пытаются подключить к своему девайсу.
Как подключить флешку к смартфону "Андроид"
Современные устройства, работающие под управлением операционной системы Android, имеют стандартный microUSB-разъем. Чтобы USB-флешка работала на вашем устройстве, в нем должна быть установлена технология USB On-The-Go. Производители начали внедрять эту функцию в ОС Android с 3.1 версии.
Как правило, в современных планшетах и тем более в телефонах не устанавливают USB-разъем. Поэтому вам понадобится USB-OTG-кабель. Некоторые производители кладут переходник для флешки в комплект, если у вас его нет, придется купить в любом магазине, где продается цифровая техника.
На смартфоне нет разъема micro-USB
Если вы не обнаружили на своем смартфоне microUSB-разъем, то необходимо будет приобрести сначала USB-OTG-кабель, а затем переходник к нему. Конечно, это довольно неудобно: если нужно подключить дополнительное устройство, придется применять несколько кабелей. Но это единственный способ, который позволит подключить флешку.
Как просмотреть содержимое внешнего накопителя
Итак, мы рассмотрели, как подключить флешку к смартфону "Андроид". Теперь переходим к открытию дополнительного устройства. Как это сделать? Нам нужно скачать файловый менеджер. Возможно, он у вас уже есть, так как в некоторых устройствах производитель устанавливает определенный набор программ. Конечно, если у вас нет файлового менеджера, придется установить. Для смартфонов под управлением ОС Android лидирующие места занимает ES File Explorer, FX File Explorer и Total Commander. Вы можете сами выбрать приложение, которое больше понравится.
Как открыть флешку на "Андроиде"
Как мы уже выяснили, нам потребуется После его установки мы можем зайти в эту утилиту и найти флешку. Если у вас не получается найти внешнее устройство, попробуйте ввести путь к файлам (/sdcard/usbStorage). После успешного открытия флешки вы можете просматривать, копировать и перемещать файлы, как на обычном компьютере. Теперь вы знаете, как подключить флешку к смартфону "Андроид" и открыть ее, но, к сожалению, на некоторых девайсах возникают проблемы. Давайте рассмотрим их и попробуем найим пути их решения.
"Андроид"-планшет или смартфон не видит флешку
Если вы дошли до этого места, то у вас возникли проблемы при подключении флешки к смартфону. Такое может быть по разным причинам. Сейчас мы рассмотрим самые распространенные из них.
Первая. Если файловый менеджер следует ему помочь. Сейчас появились приложения, которые способны устранить данную проблему. Самая эффективная программа - платная, поэтому мы рассмотрим бесплатную альтернативу. К сожалению, для нее нужны root-права. StickMount работает не только с флешками, но и с другими дополнительными устройствами.
Если у вас и вы установили необходимую утилиту, можно подключать внешнее устройство. При подключении вы должны согласиться с правилами StickMount, после чего она автоматически запустится и увидит флешку. Как найти устройство? Вы можете в файловом менеджере перейти по пути /sdcard/usbStorage/sda1. Не забывайте правильно отключать дополнительные устройства, чтобы в дальнейшем с ними не было проблем. Для этого заходим в программу и нажимаем на кнопку «Unmount».
Стоит отметить еще одно качественное приложение - Helper, которое работает по аналогичному принципу.
Вторая причина. Перед установкой дополнительных программ и root-прав стоит убедиться, что проблема не в флешке. С чем это связано? Ваше устройство попросту не видит флешку, так как она может быть настроена на другую файловую систему (возможно, NTFS).
Допустим, у вас нет ноутбука или компьютера: как тогда подключить дополнительное устройство? Необходимо загрузить Paragon NTFS & HTS+ - приложение, которое поддерживает нужный формат считывания текстовых данных. К сожалению, это приложение требует получения root-прав. Получить их можно с помощью программы King Root. Однако права суперпользователя можно получить не на всех устройствах. Помните: это вы делаете на свой страх и риск. Из-за данного приложения ваш смартфон может начать работать не совсем корректно. Если девайс еще на гарантии, то не нужно получать root-права, так как гарантия в этом случае будет утеряна.
Вывод
Итак, мы рассмотрели, как подключить внешнюю флешку к смартфону "Андроид", и описали некоторые проблемы, связанные с подключением. Как показывает практика, вопросы возникают на старых устройствах. Если у вас новый девайс, проблем возникнуть не должно. Чтобы использовать флешку, клавиатуру, мышку или другие приложения на своем устройстве, необходимо руководствоваться правилами и аккуратно все выполнять.
Android прекрасно умеет работать с USB-флешками, на некоторых девайсах есть даже полноценный USB-порт. Но так повезло не всем. В основном устройства комплектуются разъёмом microUSB. Как же быть, если нужно подключить флеш-накопитель к смартфону или планшету, оборудованному только microUSB-портом?
Android имеет технологию USB On - To - Go (в вольном переводе: подключи и используй). Суть её в том, что устройство способно подавать питание на внешние носители, подключённые через microUSB. Благодаря этому пользователь имеет возможность работать с флешками непосредственно со своего планшета или смартфона.
Эта те хнология точно есть у всех девайсов с Android 3.1 и выше . Насчёт остальных - нужно проверять. Используйте для этого программу из Google Play Market.
Проверка устройства с помощью USB OTG Checker
Чтобы проверить наличие OTG на вашем устройстве, просто запустите программу USB OTG Checker. Она протестирует устройство и покажет вам результат.
Подключение OTG-кабеля
Итак, ваше устройство достаточно современное, чтобы поддерживать эту простую технологию. Теперь вам нужен переходник с USB на microUSB. Этот кабель ещё называют OTG-кабелем.
Выглядит он как и любой обычный переходник: с одной стороны - плоский штекер для разъёма microUSB, с другой - закрытый пластмассой USB-порт.
Подключите один конец OTG-кабеля к смартфону или планшету, а в другой вставьте флеш-карту. Если всё хорошо, то на экране устройства появится соответствующее сообщение. Вам предложат открыть файловый менеджер, чтобы просмотреть данные с USB-накопителя.
StickMount: если устройство не видит флешку через переходник
К сожалению, не всегда бывает так просто. На некоторых устройствах USB-накопитель может не считаться даже при наличии OTG. Если исключить вероятность повреждения флешки (проверьте её, подключив к компьютеру), то, возможно, ваш смартфон / планшет не определяет внешний носитель автоматически. В таком случае поможет программа . Скачать её можно в Google Play Market.
- Скачайте и установите программу.
- Попробуйте вставить флешку снова.
- Теперь Android предложит вам запустить StickMount. Соглашайтесь. Флешка определится, и вы сможете просмотреть установленные на ней файлы.
Обратите внимание, программе StickMount необходим Root-доступ.
Как получить Root-доступ на устройстве
Как можно подключить USB-флешку к андроиду с помощью переходника - видео
Как посмотреть данные с флешки
Для того чтобы комфортно работать с внешним накопителем, понадобятся хорошие файловые менеджеры. Если у вас есть root-доступ, то можно выбрать любой из множества вариантов. Но если вы владелец устройства Nexus, то в Play Market есть как минимум два приложения, позволяющих обойтись без root.
Приложение | Описание |
Nexus Media Importer | Копирование медиа-данных с внешних носителей. Особенности приложения:
|
Nexus USB 2OTG FileManage . | Просмотр файлов на внешних носителях для устройств Nexus. Особенности приложения:
|
Это не единственные, но, возможно, одни из лучших. Увы, оба платные. В общем-то, они могут работать и на других устройствах, тут нужно проверять. Сделать это можно с помощью программы Nexus Photo Viewer .
Таким образом, чтобы подключить флеш-накопитель к устройству на операционной системе Android, вам понадобятся переходник с USB на microUSB и несколько программ. Кроме того, для полноценной работы со съёмным носителем нужны хорошие файловые менеджеры, которые можно установить только на смартфон или планшет с root-доступом.