Когда я запускаю намерение ACTION_OPEN_DOCUMENT_TREE, оно автоматически открывает пустую недавнюю папку? - PullRequest
0 голосов
/ 19 февраля 2019

Чего я пытаюсь добиться, так это удалить файл на SD-карте, я попробовал метод file.delete, который не сработал, потому что SD-карты читаются только сейчас.

Итак, я прочиталпост о SAF (Storage Access Framework), чтобы получить доступ для записи SD-карты путем хранения дерева Uri, которое мы получаем в onActivityResult.

Удаление файла работает нормально, но когда я начинаю намерение Intent.ACTION_OPEN_DOCUMENT_TREE иногда он возвращает последнюю папку, которая пуста, и способ показать файлы на SD-карте состоит в том, чтобы щелкнуть значок переполнения и затем выбрать показать SDCARD или Внутреннее хранилище, что может запутать некоторых людей, когда они запускают мое приложение.

я попытался добавить их к своему намерению: intent.putExtra ("android.content.extra.SHOW_ADVANCED", true); intent.putExtra ("android.content.extra.FANCY", true); intent.putExtra ("android.content.extra.SHOW_FILESIZE", true);

, который работает на некоторых устройствах, но это частный API, а на некоторых - нет.не работает.

Так есть ли способ, как автоматически открывать определенный каталог или показывать подсказку с шагами, объясняющими, какой каталог им выбрать?

private void getSDCardAccess(){
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
    Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath());
    startActivityForResult(intent, REQUEST_EXTERNAL_ACCESS);
} 


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_EXTERNAL_ACCESS && resultCode == RESULT_OK) {
        Uri treeUri = null;

        if (data != null){
            treeUri = data.getData();
        }

        if (treeUri != null && getActivity() != null) {
            getActivity().getContentResolver().takePersistableUriPermission(treeUri,
                    Intent.FLAG_GRANT_READ_URI_PERMISSION |
                            Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            StorageUtil storageUtil = new StorageUtil(getActivity());
            //Takes the access so that we can use it again after the app reopens
            storageUtil.storeTreeUri(treeUri.toString());
            Log.d(TAG, "treeUri: " + treeUri.toString());
        }else{
            Log.d(TAG,"uri is empty!");
        }
    }
} 

1 Ответ

0 голосов
/ 19 февраля 2019

есть ли способ, как автоматически открывать определенный каталог

Если у вас есть Uri к нему, который вы получили от ACTION_OPEN_DOCUMENT_TREE ранее, вы должны иметь возможность предоставитьчто через DocumentsContract.EXTRA_INITIAL_URI.Согласно документации ACTION_OPEN_DOCUMENT_TREE :

Абоненты могут установить URI документа через DocumentsContract.EXTRA_INITIAL_URI, чтобы указать начальное местоположение навигатора документов.Система приложит все усилия, чтобы запустить навигатор в указанном документе, если это папка, или папка, которая содержит указанный документ, если нет.


или показать диалог подсказки с шагами, объясняющими, какой каталог они должны выбрать?

Вам нужно сделать это самостоятельно, прежде чем позвонить startActivityForResult() для запроса ACTION_OPEN_DOCUMENT_TREE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...