Сохранение файлов на SD-карту на Android Lollipop
В Android 5 представлен новый API для работы с SD-картой. Если вы хотите записать файлы в какую-либо директорию на SC-карте, вам нужно получить к ней доступ. Насколько я знаю, это можно сделать так:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
а потом:
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (resultCode == RESULT_OK) {
Uri treeUri = resultData.getData();
getActivity().getContentResolver().takePersistableUriPermission(treeUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
}
Это средство выбора папки для запуска кода, и когда папка выбрана, для нее требуются права доступа к папке по ее Uri.
Но возможно ли получить разрешения для точного каталога по его пути? Без использования папки выбора. Я имел в виду, что я знаю каталог, к которому я хочу получить доступ, и я не хочу запускать Folder Picker, потому что это может запутать пользователя.
Как открыть DocumentFile
без взаимодействия с пользователем?
1 ответ
Это невозможно. Пользователь должен выбрать каталог с помощью средства выбора файлов Android. Единственный способ получить доступ к папке - использовать:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
Потому что файл предоставляется Storage Access Framework DocumentsProvider. На самом деле он может возвратить некоторый Uri из стороннего приложения, которое не является реальным файлом, но некоторую сущность, которую стороннее приложение представляет в виде файла.