- Хранение данных и файлов
- Внешняя карта памяти
- Состояние на текущий момент
- Что делать?
- Android 11
- Как очистить память Андроида, если она забита невидимыми файлами
- Что такое невидимые файлы на ОС Андроид?
- Обычно, ненужными файлами на телефоне являются:
- Удаление кешированных данных для очистки памяти смартфона от невидимых файлов
- Для этого выполните следующее:
- Также необходимо поступить с общими кешированными данными:
- Способ с удалением файлов из папки .thumbnails на Андроиде
- Очистка содержимого папки Download (Загрузки)
- Невидимые файлы фото и видео, копии которых у вас уже есть
- Ненужные данные Гугл Мапс на Андроиде
- Использование сторонних приложений, чтобы очистить забитую память
- Среди них:
- Сброс настроек телефона Андроид до заводских
- Для сброса телефона выполните следующее:
- Видео-инструкция
Хранение данных и файлов
В целом хранение файлов и данных можно условно разделить на две группы: во внутреннем или внешнем хранилище. Но разница между ними довольна тонка. В целом политика Гугла в отношение данных ужесточается с каждой версии системы.
Android поддерживает различные варианты хранения данных и файлов.
- Специфичные для приложения файлы. Доступ к файлам имеет только приложение, их создавшее. Файлы могут находиться во внутреннем и внешнем хранилище. У других приложений нет доступа (кроме случаев, когда файлы хранятся на внешнем хранилище). Методы getFilesDir(), getCacheDir(), getExternalFilesDir(), getExternalCacheDir(). Разрешений на доступ не требуется. Файлы удаляются, когда приложение удаляется пользователем.
- Разделяемое хранилище. Приложение может создавать файлы, которыми готово поделиться с другими приложениями — медиафайлы (картинки, видео, аудио), документы. Для медифайлов требуется разрешение READ_EXTERNAL_STORAGE или WRITE_EXTERNAL_STORAGE.
- Настройки. Хранение простых данных по принципу ключ-значение. Доступно внутри приложения. Реализовано через Jetpack Preferences. Настройки удаляются, когда приложение удаляется пользователем.
- Базы данных. Хранение данных в SQLite. На данный момент реализовано через библиотеку Room. Доступ только у родного приложения.
В зависимости от ваших потребностей, нужно выбрать нужный вариант хранения данных.
Следует быть осторожным при работе с внутренним и внешним хранилищем. Внутренне хранилище всегда есть в системе, но оно может быть не слишком большим по объёму. Вдобавок к внутреннему хранилищу, устройство может иметь внешнее хранилище. В старых моделях таким хранилищем выступала съёмная SD-карта. Сейчас чаще используют встроенную и недоступную для извлечения флеш-память. Если ваше приложение слишком большое, можно попросить систему устанавливать программу во внешнее хранилище, указав просьбу в манифесте.
В разных версиях Android требования к разрешению для работы с внешним хранилищем постоянно менялись. На данный момент (Android 10, API 29) требования выглядят следующим образом.
Приложение может иметь доступ к собственным файлам, которые находятся во внешнем хранилище. Также может получить доступ к определённым общим файлам на внешнем хранилище.
Доступ к общим файлам достигается через FileProvider API или контент-провайдеры.
Для просмотра файлов через студию используйте инструмент Device File Explorer.
Внешняя карта памяти
Когда появились первые устройства на Android, то практически у всех были внешние карточки памяти, которые вставлялись в телефон. Обычно там хранили фотки, видео и свои файлы. Всё было понятно — были различные методы для доступа к файловой системе. А потом началась чехарда. В телефонах также была и собственная «внешняя» память. Она вроде как и внешняя, но вставлена на заводе и вытащить её пользователь не мог, т.е. практически внутренняя. Затем пошла мода на телефоны, у которых была только такая внутреннее-внешняя карта. Пользователи поворчали, но привыкли. Сейчас встречаются оба варианта. Как правило, у телефонов с спрятанной картой больше памяти и выше степень водонепроницаемости.
Подобные фокусы с картой породили и другую проблему — Гугл озаботился безопасностью файлов и стала думать, как осложнить жизнь разработчику. С выходом каждой новой версии системы компания то давала добро на полный доступ к карточке, то ограничивала, то давала права с ограничениями, то откатывала свои решения назад. Короче, запутались сами и запутали всех.
Попробуем немного разобраться с этим зоопарком. Но помните, что процесс путаницы продолжается.
При подготовке материала я опирался на письма некоторых читателей сайта, которые присылали свои мысли по этому поводу. Спасибо им за структуризацию материала.
Вот что я (кажется) понял, попытавшись загрузить картинку с внешней SD карточки.
External это не External
«EXTERNAL_STORAGE» называется так не потому, что это внешняя память по отношению к устройству, а потому что она выглядит как внешняя память для компьютера, если устройство подключить кабелем к компьютеру. Причём именно выглядит, потому что обмен идёт по протоколу MTP – устройство только показывает компьютеру список папок и файлов, а при необходимости открыть или скопировать файл он специально загружается на компьютер, в отличие от настоящей флешки, файлы которой становятся файлами в файловой системе самого компьютера. Обмен по MTP позволяет устройству продолжать работать, когда оно подключено к компьютеру.
Emulated это не Emulated
Сначала я пытался прочесть файл с карточки на эмуляторе (из этого так ничего и не вышло). Функция getExternalStorageDirectory() давала мне /storage/emulated/0, и я думал, что «emulated» – это потому что на эмуляторе. Но когда я подцепил реальный планшет, слово «emulated» никуда не исчезло. Я стал рыться в интернете и обнаружил, что «Emulated storage is provided by exposing a portion of internal storage through an emulation layer and has been available since Android 3.0.» – то есть это просто кусок внутренней памяти, которая путём какой-то эмуляции делается доступной для пользователя, в отличие от собственно внутренней памяти.
При этом с точки зрения системы доступная для пользователя папка называется /storage/emulated/0, а при подключении к компьютеру по USB это просто одна из двух главных папок устройства – у меня в Windows Explorer она называется Tablet. Вторая папка у меня называется Card, и это и есть настоящая внешняя карточка.
Нет стандартных средств добраться из приложения до файлов на внешней карточке. Все попытки добраться до настоящей внешней карточки делаются с помощью неких трюков. Самое интересное, что я нашел, это статья на http://futurewithdreams.blogspot.com/2014/01/get-external-sdcard-location-in-android.html — парень читает таблицу смонтированных устройств /proc/mounts, таблицу volume daemons /system/etc/vold.fstab, сравнивает их и выбирает те тома, которые оказываются съёмными (с помощью Environment.isExternalStorageRemovable()).
Оказалось, что несистемным приложениям в принципе запрещено напрямую обращаться к съёмной карточке! Похоже, что это было так всегда, но вот начиная с версии Android 6 Marshmallow написано: внешняя карточка может быть определена как Portable либо Adoptable. Adoptable – это как бы «усыновляемая» память которая может быть «adopted», то есть взята в систему (примерно как кот с улицы в дом – это тоже называется to adopt) и использована как внутренняя. Для этого ее надо особым образом отформатировать и не вынимать, иначе не факт, что система продолжит нормально работать.
Portable – это нормальная съёмная карточка, но несистемным приложениям запрещено обращаться из программ к файлам на ней! Вот что написано в https://source.android.com/devices/storage/traditional.html:
Android 6.0 supports portable storage devices which are only connected to the device for a short period of time, like USB flash drives. When a user inserts a new portable device, the platform shows a notification to let them copy or manage the contents of that device. In Android 6.0, any device that is not adopted is considered portable. Because portable storage is connected for only a short time, the platform avoids heavy operations such as media scanning. Third-party apps must go through the Storage Access Framework to interact with files on portable storage; direct access is explicitly blocked for privacy and security reasons.
Если я правильно понял, этот самый Storage Access Framework позволяет работать с документом на карточке через диалог (открыть файл/сохранить файл), а вот прочитать или записать файл на карточке непосредственно из программы невозможно.
Общий вывод – реально из программы можно работать только с файлами на предоставляемой пользователю части встроенной памяти устройства, а на съёмной карточке – нет.
Это напоминает войну Microsoft с пользователями и разработчиками по поводу диска C:, компания уговаривала не устраивать беспорядок в корне этого диска, а ещё лучше — перенести свои файлы на другой диск. Но явных запретов не было.
Состояние на текущий момент
Гугл утверждает, что с версии Android 10 Q стандартный доступ к файлам будет прекращён. Ещё в Android 4.4 появился Storage Access Framework, который и должен стать заменой для работы с файлами.
Методы Environment.getExternalStorageDirectory() и Environment.getExternalStoragePublicDirectory() признаны устаревшими и будут недоступны. Даже если они будут возвращать корректные значения, ими вы не сможете воспользоваться.
В Android 7.0 добавили исключение FileUriExposedException, чтобы разработчики перестали использовать схему file://Uri.
Можно создавать файлы в корневой папке карточки при помощи Environment.getExternalStorageDirectory(), а также папки с вложенными файлами. Если папка уже существует, то у вас не будет доступа на запись (если это не ваша папка).
Если вы что-то записали, то сможете и прочитать. Чужое читать нельзя.
Кстати, разрешения на чтение и запись файлов не требуются, а READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE объявлены устаревшими.
Другие приложения не могут получить доступ к файлам вашего приложения. Файлы, которые вы создали через getExternalFilesDir(), доступны через Storage Access Framework, кроме файлов, созданных в корне карточки (что-то я совсем запутался). Ещё можно дать доступ через FileProvider.
При подключении USB-кабеля через getExternalFilesDir(), вы можете увидеть свои файлы и папки, а также файлы и папки пользователя. При этом файлы и папки пользователя на корневой папке вы не увидите. Вам не поможет даже adb или Device File Explorer студии.
Что делать?
Пользуйтесь методами класса Context, типа getExternalFilesDir(), getExternalCacheDir(), getExternalMediaDirs(), getObbDir() и им подобными, чтобы найти место для записи.
Используйте Storage Access Framework.
Используйте MediaStore для мультимедийных файлов.
Используйте FileProvider, чтобы файлы были видимы другим приложениям через ACTION_VIEW/ACTION_SEND.
Android 10: Появился новый флаг android:allowExternalStorageSandbox=»false» и метод Environment.isExternalStorageSandboxed() для работы с песочницей. Флаг android:requestLegacyExternalStorage=»true» для приложений, которые ещё используют старую модель доступа к файлам.
Как временное решение можно добавить в блок манифеста application атрибут android:requestLegacyExternalStorage=»true», чтобы доступ к файлам был как раньше в Android 4.4-9.0.
Android 11
Если вы создаёте файловый менеджер, то ему нужны возможности для просмотра файлов. Для этого следует установить разрешение MANAGE_EXTERNAL_STORAGE или использовать атрибут android:requestLegacyExternalStorage=»true» (см. выше).
Источник
Как очистить память Андроида, если она забита невидимыми файлами
Каждый владелец телефона на ОС Android знает, насколько важно наличие свободной памяти на его устройстве. Бывает, мы хотим установить новое приложение или снять нужный видеоролик, а телефон выдаёт сообщение, что место забито под завязку. Мы бросаемся удалять ненужные файлы и приложения, теряем драгоценное время, а нужный момент уже упущен. При детальном изучении выясняется, что приложений на нашем телефоне установлено не так уж и много, и куда делись 8-16-32 гигабайт места гаджета – неизвестно. Ниже разберём, каким образом очистить память вашего телефона на Андроид, если она забита скрытыми и невидимыми файлами.
Что такое невидимые файлы на ОС Андроид?
Большинство телефонов Андроид обычно предупреждают своих владельцев о полном заполнении внутренней памяти устройства. Но система обычно не сообщает, как и какими инструментами можно освободить столь нужное место. Практически все пользователи бросаются удалять приложения и старые фотографии, чего обычно делать не стоит. Файлы, которые действительно нужно удалить, скрыты (спрятаны) глубоко внутри папок вашего устройства, что усложняет их поиск и утилизацию.
Обычно, ненужными файлами на телефоне являются:
- Файлы кэша ОС и приложений;
- Данные в папках мессенджеров (картинки, видео, аудио и др.);
- Картинки в папке .thumbnails, расположенной в директории DCIM;
- Содержимое папки Downloads ;
- Файлы из папки торрентов (в некоторых случаях);
- Оффлайн-карты навигаторов и другое.
Давайте разберём, каким способом можно найти и удалить невидимые и ненужные файлы на ОС Андроид, чтобы очистить его память.
Удаление кешированных данных для очистки памяти смартфона от невидимых файлов
По мере того, как вы используете всё больше и больше приложений на вашем телефоне, они создают файлы кеша. Последние являются ненужными файлами и занимают много места. В зависимости от частоты и особенностей использования конкретных приложений, размер кешированных файлов у ряда программ может составлять десятки мегабайт. Также имеется другой тип кешированных данных, которые хранятся на вашем телефоне, и не принадлежит конкретному приложению.
Вы можете легко удалить два перечисленных типа кэшированных данных.
Для этого выполните следующее:
- Откройте настройки вашего телефона, и перейдите в раздел « Приложения »;
- Нажмите на любое приложение, и в открывшемся меню выберите « Хранилище » (или « Память »);
Также необходимо поступить с общими кешированными данными:
- Откройте приложение « Настройки »;
- Там выберите « Хранилище »;
- Прокрутите страницу вниз до параметра « Кешированные данные »;
- Нажмите на опцию кешированных данных для их удаления.
В некоторых версиях ОС нам поможет кнопка « Оптимизировать », находящаяся в разделе обслуживания устройства.
Этот способ поможет вам освободить достаточное количество внутренней памяти Андроид в случае, если она забита скрытыми файлами.
Способ с удалением файлов из папки .thumbnails на Андроиде
В папке .thumbnails хранятся эскизы фотографий и других медиафайлов. Работа с данными эскизами позволяет убыстрить работу телефона с плитками-миниатюрами при пользовательском просмотре имеющихся у него фотографий. Со временем в папке .thumbnails накапливаются гигабайты таких файлов, которые обычно попросту не нужны.
Найдите данную папку (она находится в директории DCIM) и удалите её содержимое. Это поможет очистить память на вашем Android, если она по каким-то причинам оказалась забита невидимыми файлами.
Очистка содержимого папки Download (Загрузки)
На каждом Андроид-телефоне присутствует папка для загрузок, в которой хранится всё, что вы загружаете из Интернета. Такая папка подчас может занимать много места, потому что всякий раз, когда нам нужно загрузить какие-либо медиа или apk-файлы, мы просто загружаем их, инсталлируем, и потом забываем о них. Таким образом, в данной папке может скопиться много файлов, замедляющих работу нашего телефона.
Для очистки памяти Андроид от ненужных файлов выполните следующее:
- Запустите ваш файловый менеджер (программу для просмотра содержимого памяти телефона);
- Перейдите во внутреннее хранилище (Internal storage) и найдите там папку « Download »;
Данные хранящиеся в этой папке часто представляют собой скрытые данные, остающиеся незамеченными.
Невидимые файлы фото и видео, копии которых у вас уже есть
У всех, кто пользуется телефоном Андроид, есть учётная запись Гугл. Компания Google предоставляет нам учётную запись в Photos, в которой мы можем бесплатно хранить до 15 Гб данных. Если вы активировали опцию « Синхронизация », то все ваши фото и видео будут автоматически сохранены в вашей учётной записи Photos.
Если вы откроете приложение « Фотографии », оно покажет вам, что можно освободить какое-то количество места на телефоне.
Выберите в меню приложения опцию « Free up Space » (Освободить место). Приложение «Photos» сообщит вам, сколько изображений можно удалить из локального хранилища. Нажмите на « Ок » (Удалить) для подтверждения.
Ненужные данные Гугл Мапс на Андроиде
Свежие версии приложения « Google Maps » (карты от Гугл) позволяют загружать карту любого маршрута или места, что упрощает навигацию. При этом загрузка таких карт потребует много места для их хранения в памяти телефона. Карты стран могут занимать многие гигабайты. Поэтому может потребоваться очистка памяти на вашем Андроиде.
Для удаления откройте приложение « Карты », тапните на аватарку вашего аккаунта, и в перечне выберите « Офлайн-карты ».
На открывшейся странице просмотрите, имеются ли у вас оффлайн-карты, и сколько места в памяти они занимают. При необходимости удалите их.
Использование сторонних приложений, чтобы очистить забитую память
В цифровых магазинах представлены различные приложения для поиска мусорных файлов и очистки памяти вашего гаджета. В частности, хорошие отзывы получило приложение «SD Maid» — удобный инструмент, позволяющий выполнять множество полезных функций.
Среди них:
- Нахождение файлов, принадлежащих приложениям, местонахождение которыз не установлено. Обычно таки приложения было удалены ранее, а мусорные файлы после него остались;
- Поиск файлов, которые можно безопасно удалить;
- Поиск и отображение файлов-дубликатов, одну часть из которых можно безопасно удалить;
- Анализ памяти – отображает, как разбита ваша память, какие папки (приложения) занимают в ней больше всего места и другое.
Установите приложение и просканируйте его инструментами ваш телефон. При необходимости удалите лишние файлы с памяти вашего гаджета.
Аналогами данного приложения являются популярные «CCleaner», «Super Clean», «ES Disk Analyzer» и другие.
Сброс настроек телефона Андроид до заводских
Наиболее эффективным (и радикальным) способом, позволяющим очистить память телефона от скрытых файлов, является сброс настроек устройства до заводских. Благодаря ему вы можете восстановить состояние вашего телефона до базового. Сброс удаляет все установленные пользователем приложения, файлы, изображения, видео документы и другие данные, собранные во время использования телефона. При этом сброс не удаляет последнюю версию Андроид и сохраняет последние обновления. Перед выполнением сброса рекомендуем скопировать все важные файлы с телефона на другой носитель во избежание их потери.
Для сброса телефона выполните следующее:
- Перейдите в « Настройки »;
- Найдите и выберите там раздел « Резервное копирование и сброс » или аналог (он также может располагаться в разделе «Дополнительные настройки»);
- Выберите « Сброс настроек »;
Видео-инструкция
В нашем материале мы рассмотрели, какими способами можно очистить память вашего Андроида, если она по какой-то причине забита невидимыми файлами. Наиболее эффективным решением в этом случае является использование специальных мобильных приложений уровня « SD Maid », « CCleaner », « ES Disk Analyzer » и других, позволяющих эффективно находить и удалять скрытые файлы в устройстве. Наиболее же кардинальным решением является сброс телефона до заводских настроек. Это позволит перевести его содержимое в заводское состояние, и удалить файловый мусор.
Источник