Android понимает пути к хранилищу

Я хочу сохранить файл на телефоне. new File(directory, myCustomFolder).

  • Мои файлы большие и MP3

1 - Environment.getExternalStorageDirectory() не всегда имеет доступ для сохранения файла. На некоторых телефонах, у которых нет SD-карты, они недоступны и ничего не возвращают. :(

2 - getFilesDir() после удаления моего приложения мои файлы удаляются. (Неподходящее место для хранения файлов) :(

3 - getCacheDir() после удаления моего приложения мои файлы удаляются. (Неподходящее место для хранения файлов) :(

4 - getDataDirectory() после удаления моего приложения мои файлы удаляются. (Неподходящее место для хранения файлов) :(

  • Теперь, как мне определить правильное место, безопасное и всегда доступное для сохранения моих файлов?
  • Мне нужна SD-карта, если ее не было, мои файлы хранятся во внутренней памяти и общедоступны (общедоступные означает, что нельзя сохранять в папку приложения данных). ?!!
  • Такие приложения, как WhatsApp и Telegram, как сделать папку на две внешней памяти и внутренней памяти?

Пожалуйста, помогите мне. Спасибо




Ответы (2)


Вы всегда можете создать папку для своего приложения в папке «Загрузки». Он всегда будет там. Вы можете получить к нему доступ через Environment.getExternalStoragePublicDirectory(Environment.DI‌​RECTORY_DOWNLOADS). И поскольку вы сохраняете файлы, это делает их еще более подходящим местом для их хранения, вы так не думаете?

person Zhi Kai    schedule 09.10.2016
comment
Environment.getExternalStoragePublicDirectory(Environment.DI‌​RECTORY_DOWNLOADS) всегда доступен, существует и доступен для записи, а mkDires() истинно? - person Farzad; 09.10.2016
comment
Да, он всегда доступен. Вы также можете использовать mkdir() для создания в нем папок (например, storage/emulated/0/Downloads/YourFolderHere) - person Zhi Kai; 09.10.2016
comment
некоторые телефоны имеют два хранилища и два DI‌​‌​RECTORY_DOWNLOADS, поэтому какой файл выбрать для сохранения? (пример: storage/sdcard0/Downloads/YourFolderHere ------- storage/sdcard1/Downloads/YourFolderHere) - person Farzad; 09.10.2016
comment
Это не то, что я имел ввиду. Я имел в виду хранить файлы в эмулируемом хранилище, а не в переносном (например, на SD-карте, USB и т. Д.). Взгляните на метод еще раз. Это getExternalStoragePublicDirectory(), а не getExternalStorageDirectory(). Используя mkdir(), вы можете создавать в нем папки, и они останутся там независимо от того, сохранит ли ваш пользователь или удалит ваше приложение, если только он не удалит папку вручную. - person Zhi Kai; 09.10.2016
comment
я тестирую на samsung note5 File(Environment.getExternalStoragePublicDirectory(Environment.DI‌​‌​RECTORY_DOWNLOADS), "MyFolder").mkDires();, но не работает и не могу создать папку. и тоже File(Environment.getExternalStorageDirectory(), "MyFolder").mkDires(); почему? :( - person Farzad; 09.10.2016

Environment.getExternalStorageDirectory() ХОРОШАЯ РАБОТА.

решение: Android API 23+ необходимо проверить опасное разрешение:

https://developer.android.com/training/permissions/requesting.html

person Farzad    schedule 10.10.2016