Mounting sd card android

Получение пути к карте памяти SD Card на Android

Разрабатывая приложение для проведения соревнований, я столкнулся с проблемой хранения базы данных. Проблема состояла в том, как мне определить внешнюю карту памяти. В целом поиск в сети точного ответа не дал. Поэтому, объединив все найденные результаты, я собрал свой класс. Если кому интересно, смотрим под катом.

Итак, начнем с теории.

Терминология

Гугл нам говорит, что есть следующие понятия:

  1. Внутренняя (internal) память — это часть встроенной в телефон карты памяти. При ее использовании по умолчанию папка приложения защищена от доступа других приложений (Using the Internal Storage).
  2. Внешняя (external) память — это общее «внешнее хранилище», т.е. это может быть как часть встроенной памяти, так и удаляемое устройство. Обычно это часть встроенной памяти, как удаляемое устройство я видел в последний раз на андройде 2.2, где встроенная память была около 2Гб, и подключаемая память становилась внешней (Using the External Storage).
  3. Удаляемая (removable) память — все хранилища, которые могут быть удалены из устройства без «хирургических» вмешательств.

До версии KitKat 4.4 API не предоставляло функционала для получения путей к внешней памяти. Начиная с этой версии (API 19) появилась функция public abstract File[] getExternalFilesDirs (String type), которая возвращает массив строк с путями к внутренней и внешней памяти. Но как же быть с нашей SD Card, которая вставлена в слот? Путь к ней мы опять не можем получить.

Результаты поиска

Чтобы ответить на поставленный вопрос я обратился к всезнающему гуглу. Но и он мне не дал четкого ответа. Было рассмотрено множество вариантов определения от использования стандартных функций, которые ведут к внешней памяти, но ничего общего с удаляемыми устройствами хранения данных они не имеют, до обработки правил монтирования устройств (Android же на ядре Linux работает). В последних случаях были использованы «зашитые» пути к папке с примонтироваными устройствами (в различных версиях эта директория разная). Не стоит забывать, что от версии к версии правила монтирования меняются.

В конечном итоге я решил объединить все полученные знания и написал свой класс, который может нам вернуть пути к внешним и удаляемым устройствам.

Описание кода

Был создан класс MountDevice, который содержит в себе путь к устройству, тип устройства и некий хэш.
Типов устройств выделено два (внутреннюю память я не стал трогать, так как к ней доступ можно получить через API системы).

И был создан класс StorageHelper, который и осуществляет поиск доступных карт памяти.

В классе StorageHelper реализовано два способа поиска — через системное окружение (Environment) и с использованием утилиты Linux mount, а точнее результата ее выполнения.

Способ первый — Environment

При работе с окружением я использую стандартную функцию getExternalStorageDirectory() для получения информации о внешней памяти. Чтобы получить информацию о удаляемой памяти, я использую переменную окружения «SECONDARY_STORAGE«.

Читайте также:  Андроид 10 автомагнитола не меняется обои

Внешняя память всегда одна и обычно всегда есть, поэтому проверяем ее на читаемость, вычисляем хэш и запоминаем. Удаляемой памяти может быть много, поэтому необходимо полученную строку разбить по разделителю и проверять каждое значение.

Вариант решения взят со stackoverflow. Ответ где-то там внизу.

Способ второй — mount

Так как у меня долго не получалось заставить систему мне сказать путь к удаляемой памяти, я решил искать в сторону примонтированных устройств. В системе есть файлы конфигурации, в которых описаны правила монтирования внешних устройств. Все бы хорошо, но на Android версии 4.* к этому файлу простым смертным доступа нет, поэтому рассматривать этот способ не буду.

Вернемся к утилите mount. При запуске без параметров команда возвращает список смонтированных файловых систем. Удаляемые устройства имеют обычно формат файловой системы FAT, то будем выделять строки, в которых есть характеристика «fat«. Внешняя память будет характеризоваться параметром «fuse«.

Примечание: при использовании такого способа не всегда корректно (скорее всего я что-то не учел) определяются типы смотнтированных устройств. Разницу замечал на разных версиях Android. Поэтому этот способ можно использовать как дополнительный.

Вариант решения взят со stackoverflow. Ответов там несколько примерно одинаковых.

Про дублирование

Многие замечали в директории монтирования устройств такую картину:

И что самое интересно, все это одна и та же внешняя карта памяти. Такое дробление начинается с версии Jelly Bean и сделано это для поддержки многопользовательского режима работы системы. Более подробно тут. И вот, чтобы не получать одну и туже карту памяти как различные устройства, необходим способ определения идентичности. Если бы был доступ к конфигурации монтирования, то и вопросов не было. Но доступа нет. Поэтому я тут подсмотрел решение с расчетом хэша для каждого устройства:

  1. создаем StringBuilder
  2. записываем в него общий размер устройства и размер используемого пространства устройства
  3. обходим содержимое корня устройства
  4. записываем имя каталога
  5. записываем имя файла и размер
  6. вычисляем hash

Пример использования

Заключение

Подробные рассуждения по этому вопросу понимания памяти в Android, некоторые советы можно прочитать тут.

Исходный код всего класса расположен еще нигде не расположен. На днях постараюсь разместить на gitHub.

Источник

Mounting sd card android

Для функционирования программы необходимы права root пользователя.

Краткое описание:
Монтирование SD с доступом и ПК, и телефона.

Описание:
Приложение позволяет монтировать карточку в режим накопителя к ПК не блокируя доступ с коммуникатора. Т.е. можете одновременно лазить по флешке и с компьютера, и с телефона.
Добавляем на экран виджет, после чего идет запрос ROOT прав. Разрешаем, жмем домик. После чего при каждом подключении к компьютеру жмем на виджет.

На Ликвиде у меня заработало после ребута.

Версия 2.14 Full //4pda.to/forum/d…ount_SD_Card_v2.14.apk
Версия 2.41 ® Multi Mount SD-Card (Пост #21580880)
Версия 2.40 //4pda.to/forum/dl/post/2583306/Multi+Mount+SD-Card+v2.40.apk
Версия 2.31 Full //4pda.to/forum/dl/post/2191834/signedMulti_Mount_SD-Card_v2.31.apk
Версия 2.31 Lite //4pda.to/forum/dl/post/2098645/Multi_Mount_SD-Card_Lite__2.31.apk
Если последняя версия работает нестабильно, пробуйте эту: Multi_Mount_SD_Card_v1.66.apk
Версия 2.3 //4pda.to/forum/dl/post/2074619/Multi_Mount_SD-Card_v2.3.apk
Версия 2.22 Multi_Mount_SD-Card_v2.22.apk
Версия 2.21 //4pda.to/forum/dl/post/1907215/Multi%20Mount%20v2.21.apk
Версия 2.15 ® Multi Mount SD-Card (Пост #13056744)
Версия 2.14 Full //4pda.to/forum/dl/post/1596384/Multi_Mount_SD_Card_v2.14_Cracked_borismanasyan.apk
Версия 2.14 //4pda.to/forum/dl/post/1528105/Multi_Mount_SD_Card_v2.14.apk
Версия 1.77 RUS: ® Multi Mount SD-Card (Пост #7123599)
Версия 2.12 Full: //4pda.to/forum/dl/post/1416302/Multi_Mount_SD_Card_2.12.apk
Версия 2.11 Full: //4pda.to/forum/dl/post/1391028/com.rafoid.multimountsdcard.widget_1.apk
Версия 2.10 Full: //4pda.to/forum/dl/post/1343229/Multi_Mount_SD_Card_v.2.10.apk
Версия 2.06: //4pda.to/forum/dl/post/1306473/MultiMountSDCardv2.06_signed.apk
Версия 1.95: //4pda.to/forum/dl/post/1272071/Multi_Mount_SD_Card_1.95.apk
Версия 1.80b Lite: //4pda.to/forum/dl/post/944819/Multi_Mount_SD_Card_Lite_1.80b.apk
Версия 1.90: //4pda.to/forum/dl/post/1144145/mmsd190.zip
Версия 1.79: //4pda.to/forum/dl/post/916614/179mm.apk
Версия 1.77: //4pda.to/forum/dl/post/902833/Multi_Mount_SD_Card_1.77.apk
Версия 1.76: //4pda.to/forum/dl/post/881381/Multi_Mount_SD_Card_1.76_.apk
Версия 1.75: Multi_Mount_SD_Card_v1.75_ru.apk (233.09 КБ)
Изменения:
— добавлено окно при подключении USB (включать в настройках)
Версия 1.66: Multi_Mount_SD_Card_v1.66.apk (196.84 КБ)
Изменения:
— пофикшены баги
Версия 1.62: com.rafoid.multimountsdcard.widget.v1.62.apk ( 135.56 КБ )
версия: 1.60
— Автомонтирование при подключении USB
— Выбор карты для монтирования (только для аппаратов с 2 флешками)
— Скрытие уведомления после некоторого времени
— Сканирование медиа файлов после отмонтирования
FREE:v.1.60 FREE
FULL: v.1.60 FULL. Благодарим доктора nd0ut
версия: 1.52
— должна работать на всех моделях
— фикс определения подключения USB
— фикс клика по виджету
FREE:com.rafoid.multimountsdcard.widget.free_2.apk ( 138.49 КБ )

Читайте также:  Санта фе мультимедиа андроид

FULL: v.1.52 FULL. Благодарим доктора nd0ut
версия: 1.41 FREE
— добавлена поддержка Nexus S
com.rafoid.multimountsdcard.widget.free_2.apk ( 138.3 КБ )

Здесь можно взять крякнутую 1.41 версию
Здесь можно взять исправленную версию 1.40 FREE с выключенными GPS и нотификациями.

Сообщение отредактировал $iLence — 20.09.18, 13:27

Источник

How to Mount an SD Card on Your Android Device

After the blip when smartphone manufacturers thought creating devices without expandable storage was a good idea, we are now seeing manufacturers adding an SD card slot to the phones again. If you’re ready to expand your storage, it’s as simple as learning to mount an SD card on your Android device.

Here we show you how to mount your SD card, unmount it, and what this whole mounting malarkey means in the first place.

Why Mount Your SD Card?

Whatever device you put an SD card into, you’ll need to mount it, which means the SD card becomes readable by whatever device it’s in. Think of it a bit like a mini-installation, which makes the SD card visible to the device and makes it play nice with processes and software on your specific phone. When you unmount it, the SD card disconnects from your device.

If you don’t mount an SD card on your Android device, it won’t be readable by your device. If you don’t unmount your SD card before removing it, you risk losing data on the card, as you didn’t give it the chance to disconnect at the software level before pulling out the hardware (sort of like switching off your PC at the mains instead of going through the Shutdown process).

How to Mount an SD Card on Your Android Phone

Mounting an SD card should be as simple as inserting it into your Android device, then following the prompt to “Mount” it. Some more modern smartphones automatically mount your SD card without asking, while on others you may need to go to “Settings -> Storage -> SD card” and follow the prompt to mount it from there. Once your SD card is mounted, it’s ready to use with your Android device.

How to Unmount (Or Eject) Your SD Card

For the most part, the term “unmount” has been replaced with the much more familiar term “Eject” these days, because it essentially means the same thing (although don’t expect your SD card to pop out of your Android phone like a VHS tape).

To eject your SD card, go to “Settings -> Storage,” then tap the “Eject” icon next to your SD card. Alternatively, tap all the way through to your SD card, then tap “Eject.” (Some older phones will have the “Unmount” option instead, which does the same thing.)

Читайте также:  Андроид 10 поворот экрана где

Most of you will know this already, but just to be sure, unmounting/ejecting doesn’t erase the data from your SD card (not to be confused with formatting, which will completely wipe your SD card).

SD Card Not Detected by Phone

If you try to mount an SD card on your Android device, but it’s not recognized, you should try formatting it on your PC to the “exFAT” format, which is readable on most Android phones. Insert the SD card into your Windows PC, right-click it in File Explorer, then click “Format.”

The main options you want to select in the new window are “exFAT” and a 1024kb unit size, which is a good default to have.

If that doesn’t work, you should try inserting a different microSD card into your phone to work out whether the problem is with the phone or the card.

Using SD Cards without an SD Card Slot

Even though newer Android devices are being shipped with increasingly more storage, you may still want to use an SD card to quickly back up files to external storage. If your device doesn’t have an SD card slot, you may still be able to technically mount an SD card on your Android device. You’ll only be able to use it for file storage, but it gives you an extra option.

You’ll need an on-the-go USB cable adapter. If you have a micro-USB charging port, you’ll need something like the UGREEN Micro USB 2.0 OTG Cable On The Go Adapter. If you have a USB-C charging port, you’ll need something like the JSAUX Type C OTG Cable. Attach a standard USB flash drive or USB card reader to the Type A end and the other end to your Android device.

Use your desired file manager to move files to your SD card or USB drive from your Android device. Remember, this is just for file storage, not app storage.

Wrapping Up

You should now know everything there is to know about the increasingly integrated process of mounting and unmounting (see ejecting) an SD card. If PCs are anything to go by, we may reach a point where you can just remove SD cards without having to “Eject” them first, but for now, keep playing it safe and do your mounting and unmounting in accordance with our guide.

Want to use your SD card as the Android internal storage? Just follow these steps.

Never Miss Out

Receive updates of our latest tutorials.

Crystal Crowder has spent over 15 years working in the tech industry, first as an IT technician and then as a writer. She works to help teach others how to get the most from their devices, systems, and apps. She stays on top of the latest trends and is always finding solutions to common tech problems.

Источник

Оцените статью