Внешнее хранилище
Внешнее хранилище относится к хранилищу файлов, которое находится не во внутреннем хранилище и доступно не только для приложения, отвечающего за файл. Основное предназначение внешнего хранилища — предоставление места для размещения файлов для совместного использования приложениями или файлов слишком большого размера для внутреннего хранилища.
Ранее внешним хранилищем назывался раздел диска на съемном носителе, таком как SD-карта (также известном как переносное устройство). Это различие уже неактуально, так как устройства Android существенно изменились и многие устройства Android больше не поддерживают съемные носители. Вместо этого некоторые устройства будут выделять часть внутренней энергонезависимой памяти для Android, которая может выполнять ту же функцию, что и съемный носитель. Это называется эмулированным хранилищем и по-прежнему считается внешним. Кроме того, у некоторых устройств Android может быть несколько внешних разделов хранилища. Например, в планшете Android (помимо его внутреннего хранилища) может быть эмулированное хранилище и один или несколько слотов для SD-карты. Все эти разделы рассматриваются Android как внешнее хранилище.
На устройствах с несколькими пользователями у каждого пользователя будет выделенный каталог в основном разделе внешнего хранилища для внешнего хранилища. Приложения, в которых работает один пользователь, не будут иметь доступа к файлам другого пользователя на устройстве. Файлы для всех пользователей по-прежнему будут доступны всем для чтения и записи. Тем не менее, Android будет изолировать каждый профиль пользователя от других.
В Xamarin.Android чтение и запись в файлы практически идентична этим процессам в любых других приложениях .NET. Приложение Xamarin.Android определяет путь к файлу, который будет обработан, а затем использует стандартные идиомы .NET для доступа к файлам. Так как фактические пути к внутреннему и внешнему хранилищу могут отличаться в зависимости от устройства или от версии Android, не рекомендуется жестко задавать путь к файлам. Вместо этого Xamarin.Android предоставляет собственные API Android, которые помогут определить путь к файлам во внутреннем и внешнем хранилище.
В этом руководстве описываются основные понятия и API в Android, относящиеся к внешнему хранилищу.
Общедоступные и частные файлы во внешнем хранилище
Существует два разных типа файлов, которые приложение может хранить во внешнем хранилище:
- Частные файлы . Частные файлы — это файлы, относящиеся к вашему приложению (но по-прежнему доступны для чтения и записи). В Android предполагается, что частные файлы хранятся в определенном каталоге во внешнем хранилище. Несмотря на то, что файлы называются «частными», они по-прежнему видимы и доступны для других приложений на устройстве, Android не предоставляет им специальные меры защиты.
- Общедоступные файлы — это файлы, которые не считаются специфичными для приложения и предназначены для свободного совместного использования.
Разница между этими файлами в основном концептуальная. Файлы являются частными, так как они считаются частью приложения, в то время как общедоступные файлы — это любые другие файлы, которые существуют во внешнем хранилище. Android предоставляет два разных API-интерфейса для разрешения путей к частным и общедоступным файлам, но в остальном для чтения и записи в эти файлы используются одни и те же интерфейсы API .NET. Это те же API-интерфейсы, которые рассматриваются в разделе о чтении и записи.
Частные внешние файлы
Частные внешние файлы считаются привязанными к приложению (аналогично внутренним файлам), но содержатся во внешнем хранилище по разным причинам (например, файлы слишком большие для внутреннего хранилища). Как и внутренние файлы, эти файлы будут удалены, если пользователь удалит приложение.
Основное расположение для частных внешних файлов определяется путем вызова метода Android.Content.Context.GetExternalFilesDir(string type) . Этот метод возвращает объект Java.IO.File , представляющий частный каталог во внешнем хранилище для приложения. Передача null этому методу приведет к возвращению пути к каталогу хранилища пользователя для приложения. Например, для приложения с именем пакета com.companyname.app корневой каталог частных внешних файлов будет таким:
/storage/emulated/0/Android/data/com.companyname.app/files/
В этом документе каталог хранилища для частных файлов во внешнем хранилище будет называться PRIVATE_EXTERNAL_STORAGE.
Параметр для GetExternalFilesDir() представляет собой строку, которая указывает каталог приложения. Этот каталог предназначен для стандартного расположения в логической организации файлов. Строковые значения доступны через константы класса Android.OS.Environment :
| Android.OS.Environment | Каталог |
|---|---|
| DirectoryAlarms | PRIVATE_EXTERNAL_STORAGE и будильники |
| DirectoryDcim | PRIVATE_EXTERNAL_STORAGE/DCIM |
| DirectoryDownloads | PRIVATE_EXTERNAL_STORAGE/скачать |
| DirectoryDocuments | PRIVATE_EXTERNAL_STORAGE/документы |
| DirectoryMovies | PRIVATE_EXTERNAL_STORAGE и фильмы |
| DirectoryMusic | PRIVATE_EXTERNAL_STORAGE/музыка |
| DirectoryNotifications | PRIVATE_EXTERNAL_STORAGE и уведомления |
| DirectoryPodcasts | PRIVATE_EXTERNAL_STORAGE/Подкасты |
| DirectoryRingtones | PRIVATE_EXTERNAL_STORAGE/мелодии звонка |
| DirectoryPictures | PRIVATE_EXTERNAL_STORAGE и рисунки |
Для устройств с несколькими разделами во внешнем хранилище каждый раздел будет содержать каталог, предназначенный для частных файлов. Метод Android.Content.Context.GetExternalFilesDirs(string type) возвращает массив Java.IO.Files . Каждый объект будет представлять частный каталог приложения для всех совместно используемых устройств с внешними хранилищами, где приложение может размещать принадлежащие ему файлы.
Точный путь к частному каталогу внешнего хранилища может отличаться в зависимости от устройства и версии Android. По этой причине приложения не должны жестко задавать путь к этому каталогу. Вместо этого они должны использовать API-интерфейсы Xamarin.Android, например Android.Content.Context.GetExternalFilesDir() .
Общедоступные внешние файлы
Общедоступные файлы — это файлы, которые существуют во внешнем хранилище и не хранятся в каталоге, который Android выделяет для частных файлов. Общедоступные файлы не удаляются при удалении приложения. Приложения Android должны получить разрешение, прежде чем они смогут считывать или записывать любые общедоступные файлы. Общедоступные файлы могут существовать везде во внешнем хранилище, но по соглашению в Android предусматривается, что общедоступные файлы будут существовать в каталоге, указанном свойством Android.OS.Environment.ExternalStorageDirectory . Это свойство будет возвращать объект Java.IO.File , который представляет основной каталог во внешнем хранилище. В качестве примера Android.OS.Environment.ExternalStorageDirectory может ссылаться на следующий каталог:
/storage/emulated/0/
В этом документе каталог хранилища общедоступных файлов во внешнем хранилище будет называться PUBLIC_EXTERNAL_STORAGE.
Android также поддерживает концепцию каталогов приложений на PUBLIC_EXTERNAL_STORAGE. Эти каталоги в точности совпадают с каталогами приложений для PRIVATE_EXTERNAL_STORAGE и описаны в таблице в предыдущем разделе. Метод Android.OS.Environment.GetExternalStoragePublicDirectory(string directoryType) возвращает объект Java.IO.File , который соответствует общедоступному каталогу приложения. Параметр directoryType является обязательным и не может иметь значение null .
Например, вызов Environment.GetExternalStoragePublicDirectory(Environment.DirectoryDocuments).AbsolutePath вернет строку, которая будет выглядеть так:
/storage/emulated/0/Documents
Точный путь к общедоступному каталогу во внешнем хранилище может отличаться в зависимости от устройства и версии Android. По этой причине приложения не должны жестко задавать путь к этому каталогу. Вместо этого они должны использовать API-интерфейсы Xamarin.Android, например Android.OS.Environment.ExternalStorageDirectory .
Работа с внешним хранилищем
Как только приложение Xamarin.Android получит полный путь к файлу, оно должно использовать любой из стандартных API-интерфейсов .NET для создания, чтения, записи или удаления файлов. Это увеличивает объем кроссплатформенного кода для приложения. Тем не менее, прежде чем пытаться получить доступ к файлу, для приложения Xamarin.Android необходимо убедиться, что к этому файлу можно осуществлять доступ.
- Проверка внешнего хранилища . В зависимости от характера внешнего хранилища оно может быть не подключено и недоступно для приложения. Все приложения должны проверять состояние внешнего хранилища, прежде чем пытаться его использовать.
- Выполнение разрешения среды выполнения проверка. Приложение Android должно запрашивать разрешение у пользователя, чтобы получить доступ к внешнему хранилищу. Это означает, что запрос на разрешение во время выполнения должен быть сделан до осуществления любого доступа к файлу. Дополнительные сведения о разрешениях Android см. в руководстве Разрешения в Xamarin.Android .
Каждая из этих двух задач будет описана ниже.
Проверка доступности внешнего хранилища
Первым действием перед записью во внешнее хранилище является проверка его доступности для чтения или записи. Свойство Android.OS.Environment.ExternalStorageState содержит строку для определения состояния внешнего хранилища. Это свойство будет возвращать строку, которая представляет состояние. Эта таблица представляет собой список значений ExternalStorageState , которые могут быть возвращены Environment.ExternalStorageState :
| ExternalStorageState | Описание |
|---|---|
| MediaBadRemoval | Носитель внезапно удален без отключения надлежащим образом. |
| MediaChecking | Носитель присутствует, но проходит проверку диска. |
| MediaEjecting | Носитель пребывает в процессе отключения и извлечения. |
| MediaMounted | Носитель подключен, в нем можно выполнять операции чтения и записи. |
| MediaMountedReadOnly | Носитель подключен, но в нем можно выполнять только операции чтения. |
| MediaNofs | Носитель присутствует, но не содержит файловой системы, подходящей для Android. |
| MediaRemoved | Носитель отсутствует. |
| MediaShared | Носитель присутствует, но не подключен. Его использует через USB-порт другое устройство. |
| MediaUnknown | Состояние носителя не распознано Android. |
| MediaUnmountable | Носитель присутствует, но его не удалось подключить к Android. |
| MediaUnmounted | Носитель присутствует, но отключен. |
Большинству приложений Android нужно будет только проверить, подключено ли внешнее хранилище. В следующем фрагменте кода показано, как проверить, подключено внешнее хранилище только для чтения или для чтения и записи:
bool isReadonly = Environment.MediaMountedReadOnly.Equals(Environment.ExternalStorageState); bool isWriteable = Environment.MediaMounted.Equals(Environment.ExternalStorageState);
Разрешения внешнего хранилища
Android рассматривает доступ к внешнему хранилищу как опасное разрешение, поэтому обычно запрашивает у пользователя предоставление разрешения на доступ к ресурсу. Пользователь может отозвать это разрешение в любое время. Это означает, что запрос на разрешение во время выполнения должен быть сделан до осуществления любого доступа к файлу. Приложениям автоматически предоставляются разрешения на чтение и запись собственных частных файлов. Приложения могут считывать и записывать частные файлы, принадлежащие другим приложениям, после получения разрешения от пользователя.
Все приложения Android должны объявить одно из двух разрешений для внешнего хранилища в AndroidManifest.xml. Чтобы определить разрешения, один из следующих двух элементов uses-permission должен быть добавлен в AndroidManifest.xml:
Если пользователь предоставил разрешение WRITE_EXTERNAL_STORAGE , то также неявно предоставляется и READ_EXTERNAL_STORAGE . Нет необходимости запрашивать оба разрешения в AndroidManifest.xml.
- Visual Studio
- Visual Studio для Mac
Разрешения также можно добавить на вкладке Манифест Android в разделе свойств решения:

Разрешения также можно добавить с помощью вкладки Манифест Android на панели свойств решения:

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

Дополнительные сведения о запросах на разрешения во время выполнения см. в руководстве Разрешения в Xamarin.Android. LocalFilesс примером monodroid также демонстрирует один из способов проверки разрешений среды выполнения.
Предоставление и отмена разрешений с помощью adb
Во время разработки приложения Android может потребоваться предоставить и отменить разрешения для проверки различных рабочих процессов, связанных с проверкой разрешений во время выполнения. Для этого можно использовать командную строку и adb. В следующих фрагментах командной строки показано, как предоставлять или отзывать разрешения с помощью ADB для приложения Android с именем пакета com.companyname.app:
$ adb shell pm grant com.companyname.app android.permission.WRITE_EXTERNAL_STORAGE $ adb shell pm revoke com.companyname.app android.permission.WRITE_EXTERNAL_STORAGE
Удаление файлов
Любой из стандартных API-интерфейсов C# можно использовать для удаления файла из внешнего хранилища, например System.IO.File.Delete . Для этого также можно использовать API-интерфейсы Java за счет переносимости кода. Пример:
System.IO.File.Delete("/storage/emulated/0/Android/data/com.companyname.app/files/count.txt");
Связанные ссылки
- Пример локальных файлов Xamarin.Android в monodroid-samples
- Разрешения в Xamarin.Android
Пропала папка с файлами Telegram: что делать и где ее найти?
![]()
В последнее время от пользователей популярного мессенджера Telegram стали поступать жалобы на пропажу папки с файлами (фото, видео, аудио). Если вы тоже столкнулись с такой проблемой, вам наверняка будет интересно узнать, с чем связана эта проблема и как её решить.
Некоторые пользователи обнаружили, что папку, в которую сохраняются файлы из мессенджера, больше нельзя найти в проводнике. Также этих файлов нет в галерее и видеоплеере. Если вы тоже заметили это, то скорее всего, на вашем смартфоне установлена операционная система Android 11. И связано исчезновение папки с файлами Telegram из проводника с новой политикой безопасности. Дело в том, что теперь мессенджер сохраняет файлы в папку по адресу:
/Android/data/org.telegram.messendger/files/Telegram
![]()
-
Скачайте и установите на свой смартфон любой файловый менеджер из Google Play;
![]()
![]()
storage/emulated/0/Android/data/org.telegram.messenger/files/Telegram
Пропала папка с файлами Telegram
В последнее время, активные пользователи Telegram, могли заметить, что папка, в которую сохраняются файлы (картинки, видео и т.д.) из этого мессенджера, пропала в проводнике. Так же, их не видно через галерею или видеоплеер. Дело в том, что вероятно в качестве операционной системы, у вас установлен Android 11. И в соответствии с новой политикой безопасности, Telegram теперь сохраняет файлы в папку, которая находится по этому пути:
- storage/emulated/0/Android/data/org.telegram.messendger/files/Telegram
Но на некоторых смартфонах, в частности Samsung, с помощью стандартного проводника, посмотреть эту папку нельзя. Поэтому, вам придется скачать сторонний файловый менеджер. Например, Total Commander или ES Проводник. С помощью них, пройдите по пути, указанному выше и вы найдете сохраненные файлы приложения Telegram.
Приложения faqpda.ru
Всего: 28 комментариев
- Еркин 27.11.2021
Большое спасибо за помощь в этом вопросе! А то уже три дня ищу эту папку (телеграмм) и нигде в интернете не находил нужного мне ответа по данной проблеме. Ещё раз благодарю.
У меня в этой папки были личные папки — они исчезли ((( Что делать?
Нет этой папки ,ни в одном проводнике
- Игорь 01.08.2022
А вы войдите сами в проводник и пройдите по пути: Android/data/org.telegram.messenger/files/Telegram
- Джамбулат 08.08.2022
Нет в папке «data» папки «org.telegram». После предложенных манипуляций она обнаруживается в папке «все предложения». Но и здесь все медиа неактивные — их не удалить не перенести.
А как сделать так что бы все было как раньше
Telegram/ video, images и т.д ? Что бы не заходить в data
- antisept Post author 15.01.2022
Можно установить предыдущую версию Android и приложений
Здравствуйте. Телеграмм Файл телефоне исчез после вчерашнего обновление как быть 19.01.22? Можно ли вернуть старую версию?
Я через Total commander открыл, внутри папки storage/emulated/0/Android/data нужно выбрать «-> Мои приложения» (это не совсем обычная папка, значок немного отличается), при ее открытии будет всплывающее окно, что в этой папке запрещен режим записи, далее можно будет найти контент Telegram.
- Марк 07.04.2022
Подскажите пожалуйста как удалить файлы? Мне не даёт их удалить, найти нашел
А как найти на айфоне?
а что выбирать, чтобы найти после того, как вышло окно, что запись запрещена?
У меня вообще нет папки мои приложения, что делать
а как удалять данные из этой папки?вот самый главный вопрос,так то я нашел эту папку уже,да,там и видео,и картинки,но их можно только просматривать,а удалять нет,почему так сделали,это же глупо,как ,по их мнению, пользователи будут удалять данные,если, во-первых,в встроенном менеджере даже увидеть ее нельзя, во-вторых,на сторонних менеджерах удалять нельзя,дорога в один конец какой-то,может я просто не знаю и эти данные удалять можно, ответьте тогда ,пожалуйста
- Артур 04.03.2022
Привет ща все обясню
- Артур 04.03.2022
Заходиш в настройки нажимаеш про телефон , пам’ять, програми та дані, находиш там телеграмм нажимаеш на него
дальше телеграм-керувати сховищем и очистити кеш и вибираєш што удалять все.
Артур обяснил Артур молодец
- Артур 04.03.2022
Пропала папка с файлами Telegram: что делать и где ее найти?
Telegram — не просто мессенджер, а настоящая медиаплатформа с чатами и каналами, где каждый день выкладывается огромное количество файлов. Это могут быть картинки, видеоролики, видеозаписи, документы и архивы. Все они автоматически сохраняются на телефон, съедая пространство на внутреннем накопителе. Но вот незадача: многие люди жалуются на то, что у них пропала папка с файлами Telegram, и они не могут получить доступ к данным через «Проводник». Разберемся, в чем заключается проблема, и как найти загруженную информацию или Телеграм.

У Телеграма есть несколько папок, некоторые из которых скрыты от пользователей
Куда Телеграм сохраняет файлы
Начнем с небольшой предыстории. На смартфонах с Android 10 и ниже файлы Телеграм попадают в папку «Telegram», расположенную на внутреннем накопителе. В ней содержится еще 4 каталога, отвечающих за разного рода контент:
- Telegram Images (картинки);
- Telegram Documents (документы);
- Telegram Video (видео);
- Telegram Audio (аудио).
Посмотрите, эти же папки есть и на моем смартфоне, однако файлы, сохраненные в них, датируются концом 2021 года. А где же данные, загруженные после?

В этой папке Телеграм хранятся файлы, загруженные до перехода на Android 11
Папка с файлами в Телеграм пропала после обновления моего смартфона до Android 11. Теперь данные не сохраняются в привычный каталог, и к ним невозможно получить доступ. Эта ситуация напрямую связана с изменением политики безопасности Android. Файлы, которые скачиваются автоматически (кэш), попадают в защищенную папку, и ее невозможно открыть при помощи стандартного «Проводника».
⚡ Подпишись на Androidinsider в Дзене, где мы публикуем эксклюзивные материалы
Как найти папку Телеграм
Новое расположение папки Телеграм — /Android/data/org.telegram.messendger/files/Telegram. Но, если вы попытаетесь найти хранилище Telegram, то увидите на экране своего смартфона сообщение «Содержимое этой папки не может быть отображено здесь из-за ограничений Android».

Через «Проводник» открыть новую папку не получится
К счастью, есть выход. В случае с моим проводником нужно просто нажать кнопку «Показать в Файлах», после чего искомую папку можно будет открыть через встроенное приложение Google Files. Попробуйте сделать то же самое. Возможно, у вас получится.

Нажав кнопку «Посмотреть в Файлах», вы получите доступ к папке Telegram
Если найти нужную папку не удастся, воспользуйтесь сторонним проводником. Например, Total Commander. Далее действуйте по инструкции:
- Запустите Total Commander.
- Поочередно откройте «Внутренний накопитель», «Android», «data» и «Мои приложения».
- Total Commander перебросит вас в Google Files, после чего вам потребуется нажать кнопку «Использовать эту папку».
- Далее останется перейти по пути /Android/data/org.telegram.messendger/files/Telegram, где вы обнаружите 4 папки с разными папками Telegram.

То же самое можно сделать через Total Commander
Файлы, сохраненные в этих каталогах, можно просматривать, но нельзя удалять. Кроме того, они не отображаются в «Галерее». Чуть позже я расскажу, как от них избавиться.
❗ Поделись своим мнением или задай вопрос в нашем телеграм-чате
Где файлы Телеграм
Прежде чем рассказать о том, как удалить файлы Телеграм, отмечу еще одно место, куда попадают ваши загруженные данные на смартфонах с Android 11 и выше. Ранее я говорил о папке Телеграм с файлами, которые скачиваются автоматически. Туда попадают фото, видео и документы, просмотренные через мессенджер. Но помимо просмотра вы можете их сохранить в «Галерею».

Файлы, сохраненные вручную, попадают в другую папку
Если вы нажали эту кнопку, то файл будет доступен через стандартный «Проводник» в одной из следующих папок:
- Pictures/Telegram (изображения);
- Movies/Telegram (видео);
- Music/Telegram (аудио);
- Download/Telegram (документы).

Вот, как попасть в папку Телеграм с изображениями, сохраненными вручную
В отличие от файлов, загружаемых автоматически, эти данные доступны не только для просмотра, но и для редактирования. Все они также отображаются в соответствующих приложениях: «Галерея» для фото и видео, «Музыка» для аудио.
Загляни в телеграм-канал Сундук Али-Бабы, где мы собрали лучшие товары с АлиЭкспресс
Как удалить файлы Телеграм
Файлы, которые вы загружали самостоятельно (то есть нажимали кнопку «Скачать»), можно удалить через «Проводник» или «Галерею». А вот данные, скачанные в автоматическом режиме, играют на смартфоне роль кэша Телеграм. Удалить его можно только через сам мессенджер:
- Запустите Telegram.
- Нажмите кнопку с тремя полосками.
- Откройте «Настройки», а затем — «Данные и память».
- Перейдите в раздел «Использование памяти».
- Нажмите кнопку «Очистить кэш Telegram».

Так вы удалите файлы, которые загрузились автоматически
Выполнив эту нехитрую манипуляцию, вы удалите все файлы, сохраненные в папке Телеграм, расположенной по пути /Android/data/org.telegram.messendger/files/Telegram. При этом вы можете отказаться от удаления некоторых типов данных. После нажатия кнопки «Очистить кэш Telegram» мессенджер предлагает снять галочки с тех типов файлов, которые планируется оставить во внутренней памяти.
⚡ Подпишись на Androidinsider в Пульс Mail.ru, чтобы получать новости из мира Андроид первым
Как сделать, чтобы Телеграм не сохранял файлы
К сожалению, Telegram не позволяет отключить автоматическое скачивание просмотренных файлов. Но, возможно, вам это и не нужно, ведь в настройках мессенджера есть другие опции. В частности, вы можете настроить автоудаление данных, а также отключить автозагрузку медиа. Во втором случае при пролистывании ленты фото и видео будут открываться только после нажатия на кнопку загрузки.

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

Теги
- Мессенджеры для Android
- Новичкам в Android
Наши соцсети
Новости, статьи и анонсы публикаций