В моем приложении пользователь может выбрать каталог для загрузки. Если он выбирает внешний съемный SD-карта (не эмулированная SD-карта !, а память, которая представляет собой настоящую физическую карту microSD, например), начиная с Android 4.4. Я могу писать только с помощью SAF
(Storage Access Framework).Storage Access Framework, takePersistableUriPermission
Я понял, как создать и записать один файл с помощью SAF:
public void newFile() {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TITLE, "newfile.txt");
startActivityForResult(intent, CREATE_REQUEST_CODE);
}
public void saveFile() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/plain");
startActivityForResult(intent, SAVE_REQUEST_CODE);
}
А вот мой onActivityResult, где я на самом деле записать в файл:
public void onActivityResult(int requestCode, int resultCode,
Intent resultData) {
Uri currentUri = null;
if (resultCode == Activity.RESULT_OK) {
if (requestCode == CREATE_REQUEST_CODE) {
if (resultData != null) {
Log.d(TAG, "CREATE_REQUEST_CODE resultData = " + resultData);
}
} else if (requestCode == SAVE_REQUEST_CODE) {
if (resultData != null) {
currentUri = resultData.getData();
getContentResolver().takePersistableUriPermission(currentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
writeFileContent(currentUri);
Log.d(TAG, "SAVE_REQUEST_CODE currentUri = " + currentUri);
}
}
}
}
А также writeFileContent
:
private void writeFileContent(Uri uri) {
try {
ParcelFileDescriptor pfd =
this.getContentResolver().
openFileDescriptor(uri, "w");
FileOutputStream fileOutputStream =
new FileOutputStream(pfd.getFileDescriptor());
String textContent = "some text";
fileOutputStream.write(textContent.getBytes());
fileOutputStream.close();
pfd.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
И, наконец, мой вопрос:
Как создать другие файлы и записать их после того, как я вызвал getContentResolver().takePersistableUriPermission
без подсказки, чтобы выбрать каталог в будущем?
Если я прав, то getContentResolver().takePersistableUriPermission
shoudl позвольте мне сделать Tha