Android and usb storage
Для функционирования программы необходимы права root пользователя и Android 4.x.
Для функционирования программы необходима установаленная ® BusyBox
Краткое описание:
Данной программой можно в один клик активировать/деактивировать режим накопителя в смартфонах Sony, Samsung.
Описание:
Программа дает вам возможность активации режима накопителья в смартфонах Sony, Samsung.
Будет экспортирован по USB ваша карта памяти в качестве накопителья, это не будет работать с вашей внутренней памятью из-за аппаратных и программых ограничений
Вы также можете создавать ярлыки и легко переключаться между режимами Накопителья и Стандартной MTP.
Ткстировалась с успешной работоспосбностью на смартфонах:
* Samsung Galaxy S4 (GT-I9500, GT-I9505, SGH-I337, SGH-M919)
* Samsung Galaxy SIII (GT-I9300, GT-I9305, SPH-L710)
* Samsung Galaxy Note II (GT-N7100)
* Samsung Grand Duos (GT-I9082)
Начиная с версии 2.2, появился новая pro версия, что имеет автоматическое переключение. Если вы пожертвовали ранее, пожалуйста, свяжитесь со мной, спасибо))
Русский интерфейс: Неизвестно
Скачать: версия: 2.3.1 SG USB Mass Storage Enabler 2.3.1.apk ( 235.54 КБ )
Скачать: версия: 2.3.1 (rus) SG USB Mass Storage Enabler (rus) 2.3.1.apk ( 266.23 КБ )
[2.3.1]
* 2.3 was a debug build with debug code, fix that.
[2.3]
* Fixed regression with shortcuts.
* Added version number to settings.
[2.2]
* Auto-detect needed files, this opens up support for more devices from other OEMs.
* Due to the above, Sony Xperia Z1 support.
* New pro version with option to auto-switch to UMS and back to MTP on cable connect/disconnect.
* Code refinements, app should perform better now.
[2.0]
* New layout and improved UI.
* Better code handling.
* Basis for new Xposed-powered version that hooks deep into Android.
[1.5]
* Fixed overlapping items when the device is flipped into landscape.
[1.4]
* Now uses RootTools to check BusyBox and root, the app should be more reliable.
* Do some checks to see if the mount point doesn’t have an actual block mounted to it (is SD card available?)
* Fallback to first detected block device
[1.3]
* Added untested support for Verizon’s Galaxy S4 (SCH-I545) (Not working)
[1.2]
* Added ads. Don’t like ads? They can be disabled 🙂
* Handle a few more exceptions in code.
* Attempt to detect if a user does not have BusyBox installed, if so, redirect them to Play Store listing.
[1.1]
* Add non-tested support for the Samsung Galaxy S4 (i9505), might work on other S4s.
[1.0]
* Initial release.
Сообщение отредактировал FijiMAX — 05.05.15, 14:26
Источник
Работа с устройствами 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 периферией достаточно проста и логична. Безусловно, реализация протоколов некоторых конкретных устройств не блещет простотой — но это проявится в любой системе в одинаковой степени.
Все приведенные примеры я взял из реального проекта, лишь исключил очевидные проверки, оставив только ключевые строки.
Источник
Android and usb storage
Для функционирования программы необходимы права root пользователя.
Краткое описание:
Приложение для подключения Mass Storage Mode и установки карты памяти в качестве USB — накопителя
Это приложение , чтобы включить Mass Storage Mode для установки карты памяти в качестве USB — накопителя от Android устройства с правами администратора(root).
Он не устанавливает внутреннюю память, и он не будет работать, если устройство не имеет внешней поддержки карт памяти и не будет работать , если SD — карта (карта памяти) используется в качестве внутренней системы хранения в Marshmallow 6.0 , так как она после этого отформатирована системой в раздел EXT4 и в зашифрованном виде .
Как пользоватся:
1. Подключите телефон с помощью кабеля USB к компьютеру, телевизору, DVD / аудио-плееру (даже в другой телефон с OTG) или любому другому устройству.
2. Откройте приложение «UMS Активатор» и дайте ему права администратора(root).Нажмите кнопку «Включить Mass Storage».
Для автозапуска режима накопителя активируйте пункт » Разрешить автозапуск» в настройках и нажмите «Сохранить & Закрыть».Далее режим накопителя будет включаться автоматически при подключении кабеля USB к какой либо технике, т.е. без необходимости запуска самой программы.
3. Перед отключением кабеля USB, извлеките из компьютера, а затем нажмите «Отключить Mass Storage» в приложении или через тумблер(выкл.) в панели уведомлений и далее отключите кабель USB
Если оно не работает, перейдите к настройкам (из опций,верхний правый угол,только для опытных пользователей) и вручную выберите необходимые параметры, и повторите попытку.
Это универсальное приложение для включения USB Mass Storage Mode.
Программа должна работать почти на всех Android One дисках, включая Oreo 8+
Заметка:
Это будет работать только при наличии USB Gadget & FUSE драйвера встроенного в ядро ..
Не пытайтесь на этих устройствах:
HTC One M9
«Что это за приложение:
Это приложение только для устройств с РУТ!!Это приложение для монтирования карты памяти в качестве запоминающего устройства USB (UMS) на вашем компьютере, или телевизоре или аудио/DVD-плеере или любом другом.
Это приложение не будет монтировать внутреннюю память (так как она находится в внутри раздела /data. ./media/0/каталога и раздела /data отформатированного в EXT4).
Если вы действительно хотите смонтировать внутреннюю память как UMS, это можно сделать с помощью USB Sharer (но это будет подключено только для чтения,
причина, почему я должен сделать это в этом приложении).Как использовать приложение:
1. Для включения запоминающего устройства, нажмите кнопку \’Enable Mass Storage\’.
2.Перед отключением USB-порта, извлеките сначала из компьютера,
затем нажмите кнопку \’Disconnect Mass Storage\’.
Если есть проблемы при работе в режиме накопителя с ПК читаем пост ®UMS Enabler(Universal) (Пост Hanabishi)
Возможные причины почему это приложение не работает:
- Ядра вашего устройства не Mass Storage Gadget или FUSE drivers.Solution: Попросите разработчика вашего устройства, собрать ядро с модулем FUSE и USB Gadget.
- Ваше устройство не поддерживает карту памяти, или она не вставлена .
- Карты памяти устройства зашифрована или используется в качестве внутренней памяти (для Android версии 6.0 или выше), в которой она отформатирована как один раздел EXT4, и зашифрована.
- Может быть что-то (например Антивирус), который не позволяет отключить принудительно SE Linux.
- Ваше устройство может быть не правильно рутировано.Чтобы проверить наличие новых обновлений или чтобы получить доп. помощь и доп. разъяснения или если есть любые предложения/найдены ошибки, нажмите здесь:http://forum.xda-developers.com/android/apps-games/app-universal-mass-storage-enabler-beta-t3240097
- Если компьютер не видит SD-карту в телефоне после выбора в UMS Enabler’е
Требуется Android: 4.0.+
Русский интерфейс: Да
Источник
Работаем с USB Custom HID на Android
В современных Android — приложениях для взаимодействия с другими устройствами чаще всего используются беспроводные протоколы передачи данных, как например Bluetooth. В годы, когда часть устройств имеют беспроводную зарядку, сложно представить себе связку Android устройства и периферийного модуля, в которой необходимо использование проводных интерфейсов. Однако когда такая необходимость возникает, на ум сразу же приходит USB.
Давайте разберем с вами гипотетический кейс. Представьте, что к вам приходит заказчик и говорит: “Мне нужно Android приложение для управления устройством сбора данных и вывода этих самых данных на экран. Есть одно НО — приложение надо написать на одноплатный компьютер с операционной системой Android, а периферийное устройство подключено по USB”
Звучит фантастически, но и такое иногда случается. И тут как нельзя кстати пригодится глубокое знание USB стека и его протоколов, но данная статья не об этом. В данной статье мы рассмотрим, как управлять периферийным устройством по протоколу USB Custom HID с Android устройства. Для простоты напишем Android-приложение (HOST), которое будет управлять светодиодом на периферийным устройством (DEVICE) и получать состояние кнопки (нажатия). Код для периферийной платы приводить не буду, кому интересно — пишите в комментариях.
Итак, приступим.
Теория. Максимально коротко
Для начала немного теории, максимально коротко. Это упрощенный минимум, достаточный для понимания кода, но для большего понимания советую ознакомиться с этим ресурсом.
Для общения по USB на периферийном устройстве необходимо реализовать интерфейс взаимодействия. Разные функции (например, USB HID, USB Mass Strorage или USB CDC) будут реализовывать свои интерфейсы, а некоторые будут иметь несколько интерфейсов. Каждый интерфейс содержит в себе конечные точки — специальные каналы связи, своего рода буферы обмена.
На моем периферийном устройстве реализован Custom HID с одним интерфейсом и с двумя конечными точками, одной для приёма, другой для передачи. Обычно информация с существующими на устройстве интерфейсами и конечными точками написана в спецификации на устройство, в противном случае определить их можно через специальные программы, к примеру USBlyzer.
Устройства в USB HID общаются через репорты. Что такое репорты? Так как данные передаются через конечные точки, то нам надо как-то идентифицировать, а также распарсить в соответствие с протоколом. Устройства не просто кидают друг другу байты данных, а обмениваются пакетами, имеющими четко определенную структуру, которая описывается на устройстве в специальном дескрипторе репорта. Таким образом, по дескриптору репорта, мы можем точно определить, какой идентификатор, структуру, размер и частоту передачи имеют те или иные данные. Идентификация пакета происходит по первому байту, который представляет из себя ID репорта. Например данные о состоянии кнопки, идут в репорта с а светодиодом мы управляем через репорт с >
Подальше от железа, поближе к Android
В Android поддержка USB устройств появилась начиная с API версии 12 (Android 3.1) Для работы с периферийным устройством нам необходимо реализовать режим USB host. Работа с USB достаточно неплохо описана в документации.
Для начала необходимо идентифицировать ваше подключаемое устройство, среди всего разнообразия USB девайсов. USB девайсы идентифицируются по сочетанию vid (vendor id) и pid (product id). Создадим в папке xml файл device_filter.xml со следующим содержимым:
Теперь необходимо внести соответствующие разрешения и action (если вам они необходимы) в манифест приложения:
В android:resource мы указываем файл с необходимыми фильтрами для устройств. Также, как я уже говорил ранее, можно назначить intent фильтры, для запуска приложения, к примеру, в результате подключения вашего устройства.
Для начала необходимо получить UsbManager, найти устройство, интерфейс и конечные точки устройства. Это необходимо делать при каждом подключении устройства.
Здесь мы видим те самые интерфейсы и конечные точки, речь о которых шла в прошлом разделе. Зная номер интерфейса, мы находим обе конечные точки, на прием и передачу, и инициируем usb соединение. На этом все, теперь можно читать данные.
Как я уже говорил ранее, устройства общаются через репорты.
В метод sendReport мы передаем массив байт, в котором нулевым байтом является репорт ID, берем текущее USB подключение к устройству и выполняем передачу. В качестве параметров в метод BulkTransfer передаем номер конечной точки, данные, их размер и таймаут передачи. Стоит отметить, что класс UsbDeviceConnection имеет методы для реализации обмена данными с устройством USB — методы bulkTransfer и controlTransfer. Их использование зависит от типа передачи, который поддерживает та или иная конечная точка. В данном случае используем bulkTransfer, хотя для HID чаще всего характерно использование конечных точек с типом control. Но у нас Custom HID, так что делаем что хотим. Про тип передачи советую почитать отдельно, так как от него зависит объем и частота передаваемых данных.
Для получения данных необходимо знать размер получаемых данных, который можно, как знать заранее, так и получить из конечной точки.
Метод получения данных по USB HID является синхронным и блокирующим и выполнять его необходимо в другом потоке, кроме того, репорты от устройства могут приходить постоянно, либо в любое время, поэтому необходимо реализовать постоянный опрос репорта, чтобы не пропустить данные. Сделаем это при помощи RxJava:
Получив массив байт, мы должны проверить нулевой байт, так как он является report ID и в соответствии с ним парсить полученные данные.
По завершении всех действий с USB нужно закрыть соединение. Можно выполнять это в onDestroy activity или в onCleared во ViewModel.
Заключение
В статье рассмотрен очень небольшой и примитивный, исключительно демонстративный код с реализацией для конкретного устройства. Конечно, классов USB существует много, не только HID и для них естественно реализация будет иная. Однако все методы достаточно неплохо документированы и имея хорошее представление о USB стеке можно легко разобраться в том, как их применять.
Источник