Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
startActivityForResult(intent, CREATE_FILE);
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (resultCode != Activity.RESULT_OK)
return;
if (requestCode == CREATE_FILE && resultData != null) {
Uri uri = resultData.getData();
if (uri != null) {
DocumentFile file = DocumentFile.fromTreeUri(getContext(), uri);
try {
DocumentFile newFile = file.createFile("text/plain", "some:file");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Это приводит к созданию файла some_file.txt
, поэтому по существу :
заменяется на _
Я пытаюсь создать файл с именем some:file.txt
, и это можно сделать вручную из приложения Файлы на телефоне:
Так что символ :
явно не ограничен, более того, у меня никогда не было этой проблемы со старым java .io.File API
Я также пытался
Intent intent = new Intent(Intent.ACTION_GET_CONTENT)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
.addCategory(Intent.CATEGORY_OPENABLE)
.setType("text/plain");
startActivityForResult(intent, OPEN_FILE);
И выбрал созданный вручную some:file.txt
и зарегистрировал имя и имя пользователя. и это было правильно с ': `
Uri: content://com.android.externalstorage.documents/document/primary%3ATEST%3AS%2Fsome%3Afile.txt
File: some:file.txt
РЕДАКТИРОВАТЬ: Один из обходных путей, который я мог бы придумать, это сохранить все документы в архиве .zip