Я недавно потерял содержимое карты micro-SD и не резервное копирование содержимого в последнее время достаточно. К счастью, я заметил, что фотографии, которых мне не хватало, оказались в /storage / emulated/0/DCIM/.эскизы на устройстве Android 5.1. Печально то, что я не могу добраться до этих файлов, чтобы сделать что-нибудь с ними на моем устройстве. Единственный способ, которым я даже знал, что они там, — это то, что файловый менеджер ASTRO поднял их, когда я искал фотографии. Я хотел бы быть в состоянии поставить их в безопасное место и надеялся сделать это через мой компьютер. Кто-нибудь знает способ заставить мой компьютер (Windows 7) распознать этот файл? (Естественно, я сказал своему компьютеру просматривать скрытые файлы, так что это не проблема.) Все, что я вижу /Внутренняя память и SD-карта (не для хранения). Если у вас есть обходной путь, пожалуйста, дайте мне знать тоже. Если бы я мог переместить (или еще лучше скопировать) эти фотографии в другое место на своем телефоне, а затем переместить их, это было бы абсолютно замечательно.

3 ответов

папка "/storage/emulated / " на самом деле не существует. Это то, что можно назвать "символической ссылкой", или, проще говоря, ссылкой на то, где хранятся реальные данные. Вам нужно будет найти фактическое физическое местоположение на вашем устройстве, где оно хранится. Так как он находится в /storage / emulated/0/DCIM/.миниатюры, вероятно, находятся в /Internal Storage/DCIM/.ноготь большого пальца./ Обратите внимание, что эта папка, вероятно, содержит только "эскизы", которые являются очень маленькими версиями реальных файлов. Возможно, ваши реальные файлы ушли навсегда, если ваша SD-карта неисправима.

изменить: "Никогда Не Говори Никогда" Ссылка на самом деле относится к эмулированной SD-карте на вашем устройстве. Получите доступ к данным "сразу" * как карта СД, и вы будете иметь доступ ко всем данным на этой карте. * Файл "приложение" Airdroid позволит это. И, если память служит, то доступ через кабель данным по USB будет также.

Я мог бы восстановить мои файлы, перейдя в " Настройки — > хранение и usb — > изображения — > камера. Там, если вы выберете фотографию, то правое верхнее меню изменится на "Выбрать все" и "копировать в"..". Сначала выберите все, а затем скопировать в папку, как "загрузки" или какой виден в проводнике. После копирования в нужную папку. Скопируйте из этой папки в папку компьютеры.

у меня была аналогичная проблема, только папке не начинаться с . . То, что решило для меня было сброс Media Manager.

на Settings -> Apps , убедится Show System проверяется в меню, искать Media Store или что-то подобное, нажмите на него и Clear Data . Затем перезагрузите телефон и подождите, пока Media Store восстановит себя.

перестройка занимает несколько минут. вы можете проверить сделано ли оно путем контролировать использование данных в этих же место, где вы его очистили. Как только он перестает расти в течение нескольких минут, это делается. Например, мой остановился на 21 МБ.

Недавно я потерял содержимое карты micro-SD и не обновил содержимое достаточно недавно. К счастью, я заметил, что фотографии, которые я отсутствовал, оказались в /storage/emulated/0/DCIM/.thumbnails на моем устройстве Android 5.1. Печально то, что я не могу добраться до этих файлов, чтобы что-либо делать с ними на моем устройстве. Единственный способ, которым я даже знал, что они были там, — это то, что ASTRO File Manager вывел их, когда искал фотографии. Мне бы хотелось, чтобы они были в надежном месте и надеялись сделать это через мой компьютер. Кто-нибудь знает, как заставить мой компьютер (Windows 7) распознать этот файл? (Естественно, я сказал своему компьютеру просмотреть скрытые файлы, так что это не проблема.) Все, что я вижу, это / Внутреннее хранилище и / SD-карта (нет / хранилище). Если у вас есть обходной путь, сообщите мне об этом. Если я смогу переместить (или еще лучше скопировать) эти фотографии в другое место на своем телефоне, а затем переместить их, это будет совершенно замечательно.

3 ответа

Папка «/ storage / emulated /» на самом деле не существует. Это то, что можно назвать «символической ссылкой» или, проще говоря, ссылкой на то, где хранятся реальные данные. Вам нужно будет найти фактическое физическое местоположение на вашем устройстве, где оно хранится. Поскольку он находится в /storage/emulated/0/DCIM/.thumbnails, он, вероятно, находится в / Internal Storage / DCIM / .thumbnails /. Обратите внимание, что эта папка, вероятно, содержит только «миниатюры», которые представляют собой очень маленькие версии реальных файлов. Возможно, ваши настоящие файлы ушли навсегда, если ваша SD-карта невосстановима.

Изменить: "Никогда не говори никогда" Ссылка на самом деле относится к эмулированной SD-карте на вашем устройстве. Получите доступ к данным «напрямую» * в качестве SD-карты, и у вас будет доступ ко всем данным на этой карте. * Файл Airdroid «приложение» позволит это. И, если память обслуживается, доступ через USB-кабель для передачи данных также будет.

Я мог бы восстановить мои файлы, перейдя в «Настройки — > Хранение и usb — > Изображения — > Камера. Если вы выберете фотографию, то в правом верхнем меню изменится значение« Выбрать все »и« Копировать в .. »Сначала выберите все, затем скопируйте в папку« Загрузка »или в зависимости от того, что видно в проводнике. После копирования в нужную папку Скопируйте из этой папки в папку« Компьютеры ».

У меня была аналогичная проблема, только папка не начиналась с . . Что для меня решило сбросить Media Manager.

Перейдите в Settings -> Apps , убедитесь, что в меню указано Show System , найдите Media Store или что-то в этом роде, щелкните по нему и Clear Data . Затем перезагрузите телефон и подождите, пока Media Store не восстановит себя.

Перестройка занимает несколько минут. Вы можете проверить, выполняется ли это путем мониторинга использования данных в том же месте, где вы его очистили. Как только он перестает расти в течение пары минут, это делается. Например, мой остановился на 21 МБ.

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

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

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

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

  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".

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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