не удается управлять начальным каталогом, в котором должен начинаться пользовательский интерфейс SAF

#java #android #android-10.0 #storage-access-framework #android-11

#java #Android #android-10.0 #хранилище-доступ-фреймворк #android-11

Вопрос:

Я пытаюсь сохранить текстовый файл с помощью SAF (платформа доступа к хранилищу), но я не могу контролировать, где он должен быть сохранен, я использовал этот метод из документации следующим образом:

 private void createFile(Uri pickerInitialUri) {
    Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("text/*");
    intent.putExtra(Intent.EXTRA_TITLE, "new.txt");

    // Optionally, specify a URI for the directory that should be opened in
    // the system file picker when your app creates the document.
    intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri);


    startActivityForResult(intent, CREATE_FILE);
}
 

Передача Uri корневого каталога следующим образом:

 Uri.parse(Environment.getExternalStorageDirectory().toString())
 

Но какую бы строку я ни анализировал, и даже если я передаю null как Uri, пользовательский интерфейс framework всегда запускается при загрузке.

Я хочу сохранить файл в корневом каталоге. кроме того, я хочу сохранить его автоматически без какого-либо взаимодействия с пользователем.

Комментарии:

1. Используйте uri, который вы получили ранее, выбирая каталог или файл. Вы не можете создать эти uries самостоятельно.

2. Вы не можете сохранить с помощью SAF без хотя бы одного взаимодействия с пользователем.

3. @blackapps вы имеете в виду, что я должен получить uri из журналов или через отладчик из onActivityResult? Я не совсем понимаю, что вы подразумеваете под uri, который я получил ранее

4. @balckapps начальный каталог всегда находится там, где я сохранял в последний раз.. если начальный каталог загружается впервые, как я упоминал в вопросе

5. the starting directory is always where I saved the last time. Да, если вы ничего не делаете. Перечитайте мой первый комментарий.

Ответ №1:

Цитирование документации для EXTRA_INITIAL_URI :

[Дополнительный] должен указывать URI документа или URI дерева с идентификатором документа.

«URI документа» — это тот, который вы получили ранее из ACTION_OPEN_DOCUMENT или ACTION_CREATE_DOCUMENT . «URI дерева» — это тот, который вы получили ранее ACTION_OPEN_DOCUMENT_TREE . Uri.parse() не является ни тем, ни другим.

Комментарии:

1. Спасибо за разъяснение, оказывается, что SAF не подходит для моего варианта использования.. Я хочу проверить устройство, сохранив текстовый файл с серийным номером в каталоге, отличном от каталога приложения, потому что я хочу, чтобы этот файл был в безопасности, если пользователь удалил и переустановил приложение. SAF не подойдет, поскольку этот файл считывается при входе в систему, и пользователь не долженперейдите к каждому входу в этот каталог .. есть предложения о том, как мы можем это сделать?

2. @mahmoudsfares: Извините, но то, что вы ищете, на самом деле не поддерживается шаблоном в современных версиях Android.