Как создать папку или файл используя Scoped Storage
Как создать папку или файл в Android 10 используя Scoped Storage?
Сейчас есть метод, который работает на Android 9 и записывает в папку аудиопоток. Как его переделать под Android 10 и выше?
@Override
protected Object doInBackground(Object[] objects) {
isRecording = true;
try {
URL url = new URL(urlPath);
InputStream inputStream = url.openStream();
File direct = new File(Environment.getExternalStorageDirectory() + File.separator + AppConstants.dirName);
if (!direct.exists()) {
File musicFolder = new File(Environment.getExternalStorageDirectory() + File.separator + AppConstants.dirName);
musicFolder.mkdirs();
}
File file = new File(Environment.getExternalStorageDirectory() + File.separator + AppConstants.dirName, recordedFileName);
System.out.println(file.getAbsoluteFile());
OutputStream outputStream = new FileOutputStream(file);
byte[] buffer = new byte[4*1024];
int read;
while ((read = inputStream.read(buffer)) != -1) {
if(isCancelled())
break;
outputStream.write(buffer,0,read);
}
outputStream.flush();
outputStream.close();
inputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Ответы (1 шт):
Автор решения: Barmaley
→ Ссылка
Создаем каталог так:
1)Стартуем Intent.ACTION_OPEN_DOCUMENT_TREE, примерно так:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
startActivityForResult(intent,REQUEST_FOLDER);
2)Юзеру будет предъявлен системный файл селектор, в котором он сможет выбрать каталог
3)Ловим в onActivityResult выбранный юзером каталог, который обрабатываем примерно так:
//сначала получаем постоянный доступ на запись и чтение к каталогу
ContentResolver contentResolver = context.getContentResolver();
int takeFlags = intent.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
Uri folderUri = intent.getData();
contentResolver.takePersistableUriPermission(folderUri, takeFlags);
//далее получаем ссылку на каталог в виде DocumentDile
DocumentFile pickedDir = DocumentFile.fromTreeUri(context, folderUri);
//создаем каталог
pickedDir.createDirectory("my_folder);
Для создания файла
Надо запустить Intent.ACTION_CREATE_DOCUMENT и поймать ссылку на него в onActivityResult