Где в телефоне находится sd карта. Настройка карты памяти в Android

Во почти всех современных телефонах и планшетах, работающих на операционной системе Дроид, имеется поддержка карт памяти формата microSD. Они помогают прирастить размер общей памяти на устройстве, которую можно применять для хранения разных документов, музыки, фото и фильмов. Как на Дроид открыть карту памяти и употреблять ее место для хранения собственных данных?

Для того, чтоб добраться до содержимого карты памяти, пригодится употреблять хоть какой файловый менеджер. Он может быть предустановлен в вашем устройстве по умолчанию либо установлен во время работы с аппаратом. Наиболее тщательно о том, какие бывают файловые менеджеры, можно выяснить из статьи:

какой файловый менеджер установить на Андроид

Зайдя в проводник, можно узреть различное обозначение карты памяти. Ежели она установлена, как основной источник сохранения данных, то ее заглавием может быть SDcard (SD-карта), ежели же приложения инсталлируются на внутреннюю память, то заглавие карточки может быть SDcard1 (SD-карта (2)). Также, заглавие карты может быть просто “Внешняя память”.

Стоит увидеть, что бывают ситуации, когда телефон не лицезреет карту памяти.

Почему телефон не лицезреет карту памяти?

  • Карта повреждена и ее работа невозможна;
  • Файловая система на карте памяти не поддерживается аппаратом. Для этого нужен подключить карточку к компу и отформатировать ее в FAT32.
  • Объем памяти на карте превосходит допустимы поддерживаемый устройством. Большинство современных аппаратов поддерживают карты память емкостью до 32 ГБ, потому карточки на 64 ГБ аппарат не сумеет увидеть.

Помимо карт памяти microSD на неких телефонах и планшетах существует возможность подключать твердые диски и флешки с помощью OTG-кабеля. Более тщательно про OTG можно прочесть в статье:

расширяем память на Андроид

Поддерживает ли ваш телефон OTG вы сможете выяснить из аннотации к собственному аппарату.

Содержание

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

vait3 апреля 2015 в 10:21

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

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

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

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

  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 работает). В крайних вариантах были применены «зашитые» пути к папке с примонтироваными устройствами (в разных версиях эта директория разная). Не стоит забывать, что от версии к версии правила монтирования меняются.

Читайте также  Принтскрин как пользоваться. Print Screen

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

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

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

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

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

Способ 1-ый — Environment

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

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

Функция fillDevicesEnvirement

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

Способ 2-ой — mount

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

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

Читайте также  Новый виджет для самсунг смарт тв. Виджеты для Samsung Smart TV

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

Функция fillDevicesProcess

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

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

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

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

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

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

Заключение

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

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

Кто еще какими методами пользуется?

UPD1: Начальный код класса на bitbucket

Теги:
Хабы:
  • 16
Реклама

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Оставьте комментарий