Скачивая файлы на своем Андроид смартфоне или планшете, многие пользователи сталкиваются с тем, что они не могут найти скачанный файл. Они просто не знают, куда скачиваются файлы на Андроид. В этом материале мы постараемся решить эту проблему.
Если коротко, то на Андроид файлы скачиваются в папку Download. А место расположения этой папки может меняться в зависимости от прошивки вашего Андроид устройства. Например, папка Download может размещаться по одному из адресов:
- mnt/sdcard/download
- storage/emulated/0/download
Для того чтобы найти данную папку установите хороший файловый менеджер. Например, такой как AntTek Explorer Ex.
Если скачанных файлов нет в папке Download, то возможно программа, с помощью которой вы скачивали, сохранила файлы в другую папку. Откройте программу и войдите в ее настройки. Возможно, там будет указана папка для сохранения скачанных файлов. Например, в веб-браузере Dolphin для того чтобы сменить папку для сохранения скачанных файлов необходимо открыть: Настройки – Конфиденциальность и персональные данные – Загрузить директорию.
Кроме этого, нередко в самой программе можно посмотреть список файлов, которые были скачаны. Например, такая функция есть в веб-браузерах Dolphin и Firefox.
Также нужно помнить, что после каждого скачанного файла в верхнем меню с уведомлениями появляется специальное сообщение, о том, что был скачан файл. Нажав на это сообщение, вы сможете открыть скачанный файл.
Есть чем дополнить материал? Расскажите об этом в комментариях.
—> Разрабатывая приложение для проведения соревнований, я столкнулся с проблемой хранения базы данных. Проблема состояла в том, как мне определить внешнюю карту памяти. В целом поиск в сети точного ответа не дал. Поэтому, объединив все найденные результаты, я собрал свой класс. Если кому интересно, смотрим под катом. Итак, начнем с теории.
Терминология
Гугл нам говорит, что есть следующие понятия:
- Внутренняя (internal) память — это часть встроенной в телефон карты памяти. При ее использовании по умолчанию папка приложения защищена от доступа других приложений (Using the Internal Storage).
- Внешняя (external) память — это общее «внешнее хранилище», т.е. это может быть как часть встроенной памяти, так и удаляемое устройство. Обычно это часть встроенной памяти, как удаляемое устройство я видел в последний раз на андройде 2.2, где встроенная память была около 2Гб, и подключаемая память становилась внешней (Using the External Storage).
- Удаляемая (removable) память — все хранилища, которые могут быть удалены из устройства без «хирургических» вмешательств.
До версии KitKat 4.4 API не предоставляло функционала для получения путей к внешней памяти. Начиная с этой версии (API 19) появилась функция public abstract File[] getExternalFilesDirs (String type), которая возвращает массив строк с путями к внутренней и внешней памяти. Но как же быть с нашей SD Card, которая вставлена в слот? Путь к ней мы опять не можем получить.
Результаты поиска
Чтобы ответить на поставленный вопрос я обратился к всезнающему гуглу. Но и он мне не дал четкого ответа. Было рассмотрено множество вариантов определения от использования стандартных функций, которые ведут к внешней памяти, но ничего общего с удаляемыми устройствами хранения данных они не имеют, до обработки правил монтирования устройств (Android же на ядре Linux работает). В последних случаях были использованы «зашитые» пути к папке с примонтироваными устройствами (в различных версиях эта директория разная). Не стоит забывать, что от версии к версии правила монтирования меняются. В конечном итоге я решил объединить все полученные знания и написал свой класс, который может нам вернуть пути к внешним и удаляемым устройствам.
Описание кода
Был создан класс MountDevice, который содержит в себе путь к устройству, тип устройства и некий хэш. Типов устройств выделено два (внутреннюю память я не стал трогать, так как к ней доступ можно получить через API системы).
public enum MountDeviceType { EXTERNAL_SD_CARD, REMOVABLE_SD_CARD }
И был создан класс StorageHelper, который и осуществляет поиск доступных карт памяти. В классе StorageHelper реализовано два способа поиска — через системное окружение (Environment) и с использованием утилиты Linux mount, а точнее результата ее выполнения.
Способ первый — Environment
При работе с окружением я использую стандартную функцию getExternalStorageDirectory() для получения информации о внешней памяти. Чтобы получить информацию о удаляемой памяти, я использую переменную окружения «SECONDARY_STORAGE«. Внешняя память всегда одна и обычно всегда есть, поэтому проверяем ее на читаемость, вычисляем хэш и запоминаем. Удаляемой памяти может быть много, поэтому необходимо полученную строку разбить по разделителю и проверять каждое значение. Функция fillDevicesEnvirement
String path = android.os.Environment.getExternalStorageDirectory() .getAbsolutePath(); if (!path.trim().isEmpty() && android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { testAndAdd(path, MountDeviceType.EXTERNAL_SD_CARD); } // Получаем ремувабл String rawSecondaryStoragesStr = System.getenv("SECONDARY_STORAGE"); if (rawSecondaryStoragesStr != null && !rawSecondaryStoragesStr.isEmpty()) { // All Secondary SD-CARDs splited into array final String[] rawSecondaryStorages = rawSecondaryStoragesStr .split(File.pathSeparator); for (String rawSecondaryStorage : rawSecondaryStorages) { testAndAdd(rawSecondaryStorage, MountDeviceType.REMOVABLE_SD_CARD); } }
Вариант решения взят со stackoverflow. Ответ где-то там внизу.
Способ второй — mount
Так как у меня долго не получалось заставить систему мне сказать путь к удаляемой памяти, я решил искать в сторону примонтированных устройств. В системе есть файлы конфигурации, в которых описаны правила монтирования внешних устройств. Все бы хорошо, но на Android версии 4.* к этому файлу простым смертным доступа нет, поэтому рассматривать этот способ не буду. Вернемся к утилите mount. При запуске без параметров команда возвращает список смонтированных файловых систем. Удаляемые устройства имеют обычно формат файловой системы FAT, то будем выделять строки, в которых есть характеристика «fat«. Внешняя память будет характеризоваться параметром «fuse«. Примечание: при использовании такого способа не всегда корректно (скорее всего я что-то не учел) определяются типы смотнтированных устройств. Разницу замечал на разных версиях Android. Поэтому этот способ можно использовать как дополнительный. Функция fillDevicesProcess
try { Runtime runtime = Runtime.getRuntime(); proc = runtime.exec("mount"); try { is = proc.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); while ((line = br.readLine()) != null) { if (line.contains("secure")) continue; if (line.contains("asec")) continue; if (line.contains("fat")) {// TF card String columns[] = line.split(" "); if (columns != null && columns.length > 1) { testAndAdd(columns[1], MountDeviceType.REMOVABLE_SD_CARD); } } else if (line.contains("fuse")) {// internal(External) // storage String columns[] = line.split(" "); if (columns != null && columns.length > 1) { // mount = mount.concat(columns[1] + "n"); testAndAdd(columns[1], MountDeviceType.EXTERNAL_SD_CARD); } } } } finally { ... } } catch (Exception e) { ... }
Вариант решения взят со stackoverflow. Ответов там несколько примерно одинаковых.
Про дублирование
Многие замечали в директории монтирования устройств такую картину:
/storage/sdcard0/ /storage/emulated/0/ /storage/emulated/legacy/
И что самое интересно, все это одна и та же внешняя карта памяти. Такое дробление начинается с версии Jelly Bean и сделано это для поддержки многопользовательского режима работы системы. Более подробно тут. И вот, чтобы не получать одну и туже карту памяти как различные устройства, необходим способ определения идентичности. Если бы был доступ к конфигурации монтирования, то и вопросов не было. Но доступа нет. Поэтому я тут подсмотрел решение с расчетом хэша для каждого устройства:
- создаем StringBuilder
- записываем в него общий размер устройства и размер используемого пространства устройства
- обходим содержимое корня устройства
- записываем имя каталога
- записываем имя файла и размер
- вычисляем hash
Своя функция расчета хэша calcHash
private int calcHash(File dir) { StringBuilder tmpHash = new StringBuilder(); tmpHash.append(dir.getTotalSpace()); tmpHash.append(dir.getUsableSpace()); File[] list = dir.listFiles(); for (File file : list) { tmpHash.append(file.getName()); if (file.isFile()) { tmpHash.append(file.length()); } } return tmpHash.toString().hashCode(); }
Пример использования
/* Получаем базовый путь */ if (!mPreferences.contains(PREFS_BASEBATH)) { // Если еще не сохранялся в настройках, то пытаемся найти карты // памяти ArrayList storages = StorageHelper.getInstance() .getRemovableMountedDevices(); // проверяем съемные карты памяти if (storages.size() != 0) { setBasePath(storages.get(0).getPath() + mAppPath); } else if ((storages = StorageHelper.getInstance() // Проверяем // внутреннюю // память .getExternalMountedDevices()).size() != 0) { setBasePath(storages.get(0).getPath() + mAppPath); } } else { // Вытаскиваем из сохранненых настроек mBasePath = mPreferences.getString(PREFS_BASEBATH, context .getFilesDir().getParent()); }
Заключение
Подробные рассуждения по этому вопросу понимания памяти в Android, некоторые советы можно прочитать тут. Исходный код всего класса расположен еще нигде не расположен. На днях постараюсь разместить на gitHub. Кто еще какими способами пользуется? UPD1: Исходный код класса на bitbucket 173 237.3k 173
Как найти папку storage на Андроид?
Жалоба
Опишите причину своей жалобы
Распаковал архив в storage и не могу найти указаный путь
как найти папку /storage/sdcard0/ на Android?
zlyden
Mor
Это вообще-то не папка, storage это хранилище общее, включает в себя память устройства, внутреннюю память и внешнюю карту памяти.Потому и пишет storage/SDcard 0/а дальше уже папки. Вы распаковать наверное в sdcard 0, там и надо искать, а может в sdcard1 смотря куда направили.
mastermiha
Для того, чтобы было все понятно с этим, достаточно установить любой файловый менеджер, например Тотал Коммандер, а вот в нем уже можно увидеть, что папка storage/sdcard0 находится вот здесь:
sdcard0 — обычно карта памяти устройства, во всяком случае у меня именно так;
sdcard1 — встроенная память, на которой можно хранить файлы(для приложений имеется другой отдел памяти, но в данном случае это не важно).
Распаковывать архивы и добавлять другие файлы следует в одно из этих расположений, а вот просто в корень файловой системы их не рекомендуется помещать.
baton
На самом деле storage в android это не папка а раздел который включает в себя реальные карты памяти, как внутреннюю так и флеш память (SD). А когда прописывается путь к какому то файлу то в начале указывается storage.
Источник: www.bolshoyvopros.ru
Недавно я потерял содержимое карты micro-SD и не обновил содержимое достаточно недавно. К счастью, я заметил, что фотографии, которые я отсутствовал, оказались в /storage/emulated/0/DCIM/.thumbnails на моем устройстве Android 5.1. Печально то, что я не могу добраться до этих файлов, чтобы что-либо делать с ними на моем устройстве. Единственный способ, которым я даже знал, что они были там, — это то, что ASTRO File Manager вывел их, когда искал фотографии. Мне бы хотелось, чтобы они были в надежном месте и надеялись сделать это через мой компьютер. Кто-нибудь знает, как заставить мой компьютер (Windows 7) распознать этот файл? (Естественно, я сказал своему компьютеру просмотреть скрытые файлы, так что это не проблема.) Все, что я вижу, это /Внутреннее хранилище и /SD-карта (нет /хранилище). Если у вас есть обходной путь, сообщите мне об этом. Если я смогу переместить (или еще лучше скопировать) эти фотографии в другое место на своем телефоне, а затем переместить их, это будет совершенно замечательно.
оригинал
3 ответа
7
Папка «/storage /emulated /» на самом деле не существует. Это то, что можно назвать «символической ссылкой» или, проще говоря, ссылкой на то, где хранятся реальные данные. Вам нужно будет найти фактическое физическое местоположение на вашем устройстве, где оно хранится. Поскольку он находится в /storage/emulated/0/DCIM/.thumbnails, он, вероятно, находится в /Internal Storage /DCIM /.thumbnails /. Обратите внимание, что эта папка, вероятно, содержит только «миниатюры», которые представляют собой очень маленькие версии реальных файлов. Возможно, ваши настоящие файлы ушли навсегда, если ваша SD-карта невосстановима.
Изменить: «Никогда не говори никогда» Ссылка на самом деле относится к эмулированной SD-карте на вашем устройстве. Получите доступ к данным «напрямую» * в качестве SD-карты, и у вас будет доступ ко всем данным на этой карте. * Файл Airdroid «приложение» позволит это. И, если память обслуживается, доступ через USB-кабель для передачи данных также будет.
ответил phyrfox3 августа 2015, 06:22:20 3
Я мог бы восстановить мои файлы, перейдя в «Настройки -> Хранение и usb -> Изображения -> Камера. Если вы выберете фотографию, то в правом верхнем меню изменится значение« Выбрать все »и« Копировать в .. »Сначала выберите все, затем скопируйте в папку« Загрузка »или в зависимости от того, что видно в проводнике. После копирования в нужную папку Скопируйте из этой папки в папку« Компьютеры ».
ответил The Analyst12 июня 2016, 17:28:39 1
У меня была аналогичная проблема, только папка не начиналась с .
. Что для меня решило сбросить Media Manager.
Перейдите в Settings -> Apps
, убедитесь, что Show System
проверяется в меню, ищите Media Store
или что-то в этом роде, щелкните по нему и Clear Data
. Затем перезагрузите телефон и подождите, пока Media Store не восстановит себя.
Перестройка занимает несколько минут. Вы можете проверить, выполняется ли это путем мониторинга использования данных в том же месте, где вы его очистили. Как только он перестает расти в течение пары минут, это делается. Например, мой остановился на 21 МБ.
ответил André Chalella6 марта 2017, 05:09:28
Похожие вопросы
8 Как получить доступ к столбцу, имя которого я не могу получить доступ в цепочечных операций 3 Как я могу удалить учетную запись Yahoo навсегда, когда я не могу получить к ней доступ? 4 Как я могу избежать состояния «TypeError: не могу получить доступ к мертвому объекту» в моем дополнении Firefox? 24 Как я могу получить доступ к google.com за пределами США? 23 Могу ли я получить доступ к Gmail через SSL? 14 Я не могу получить доступ к корневой папке 39 Как я могу получить доступ к ServletContext из веб-службы JAX-WS? 9 Как я могу получить доступ к переменным JavaScript в JSP? 2 Не могу получить доступ к личным файлам 78 Как я могу получить доступ к сессии в веб-методе? 59 Как я могу получить доступ к ResourceDictionary в wpf из кода C #? 7 Как я могу получить доступ к SQLite с помощью C #? 4 Как я могу получить доступ к `this` в обработчике событий? 4 Не могу получить доступ к JPanel публично () 4 Как я могу получить доступ к фейсбуку на питоне? 4 Как я могу получить доступ к модифицированному QLabel? 4 Как я могу получить доступ к иконкам GitHub? 2 Magento — не удается получить доступ к удаленному сайту, но может получить доступ к простому файлу index.html 7 Не удается получить доступ к локальному хосту после обновления до Mavericks, но может получить доступ к 127.0.0.1 107 Могу ли я получить доступ к Ubuntu из Windows удаленно?
Популярные теги
security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132 19.04.2015
После этого скачиваем интересующий вас файл из Интернета. Как правило, его можно открыть, просто нажав на уведомление, однако если по какой-либо причине оно свернулось, а файл открыть всё же нужно, на помощь придет файловый менеджер. Поможет он и просто в том случае, если кто-то из ваших друзей перекинул документ на ваш смартфон с помощью USB-кабеля. Тогда вопрос «Где же он находится?» станет самым актуальным.
Все скачанные из Интернета файлы хранятся в папке «Download». Для её открытия вам требуется открыть файловый менеджер, затем найти в каталогах данную папку. После этого вы сможете открыть любой скачанный ранее файл, в том числе установочный *.apk, *.zip и так далее.
В случае, если вам неизвестно, где именно сохранился ваш файл, вы можете произвести поиск, нажав на иконку лупы в приложении, речь не идет именно о Cabinet. С тем же успехом можно использовать и ES Проводник, например.
Хотим обезопасить пользователей от случайных действий. Так как память смартфонов разделена на два раздела: системная и внутренняя, есть риски удаления системных файлов, что приведет к некорректной работе смартфона. Для их удаления вам потребуются Root-права, однако возможны и случаи, когда Root-доступ имеется, а сам пользователь об этом и понятия не имеет.
Таким образом, мы научились находить скачанные из Интернета файлы. Предлагаем поддержать неопытных пользователей и прокомментировать статью, добавив свои дополнения.
- https://smartphonus.com/куда-скачиваются-файлы-на-android/
- https://m.habr.com/post/254813/
- https://otvetmne.ru/internet/question/kak-naiti-papky-storage-na-android
- https://sprosi.pro/questions/161808/kak-ya-mogu-poluchit-dostup-k-storage-emulated-0-dcim-na-ustroystve-android
- https://androidinsider.ru/polezno-znat/kak-nayti-zagruzhennyiy-fayl-v-android-smartfone.html