SAF-декодированный Uris, по-видимому, считается отличным от кодированных SAF-методами. - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь ввести SAF в моем приложении для Android.

Кажется, что Uris от многих методов SAF в закодированном виде, с такими символами, как: или / заменены% 3A и% 2F, дляпример.

В моем приложении я декодирую Uris, поэтому они имеют следующую форму:

content: //com.android.providers.downloads.documents/tree/raw: / storage / emulated /0 / Загрузить / foldername

для их хранения.

Возможно, это неправильно. Поэтому я спрашиваю, обманываются ли методы SAF при передаче uri, которые анализируются из строк в форме, которую мое приложение архивирует, то есть с реальными символами, такими как: и /

Метод, подобный этому:

static public DocumentFile createFolderInFolder(Activity activity,String parentFolderUriStringParam,String folderName)
{
DocumentFile result=null;
String parentFolderUriString=Uri.decode(parentFolderUriStringParam);
ContentResolver contentResolver;
contentResolver = activity.getContentResolver();
Uri parentFolderUri=null;
Uri oldParentUri = Uri.parse(parentFolderUriString);
String id = DocumentsContract.getTreeDocumentId(oldParentUri );
parentFolderUri= DocumentsContract.buildChildDocumentsUriUsingTree(oldParentUri , id);
 DocumentFile parentFolder = DocumentFile.fromTreeUri(activity, parentFolderUri);
result=parentFolder.createDirectory(folderName);
return result;
}

имеет

parentFolderUriStringParam = content: //com.android.providers.downloads.documents/tree/raw: / storage / emulated / 0 / Скачать / имя_фолдера

oldParentUri ="content: //com.android.providers.downloads.documents/tree/raw: / storage / emulated / 0 / Download / foldername"

id = "raw:" *

parentFolderUri =содержание: //com.android.providers.downloads.documents/tree/raw%3A/document/raw%3A/children

1 Ответ

0 голосов
/ 30 сентября 2019

Вы не должны изменять полученные строки URI. Сохраните их как есть. Используйте их как есть.

Сохраняйте только data.getData (). ToString () в onActivityResult.

...