ДЕЙСТВИЕ ОТКРЫТОГО ДОКУМЕНТА ДЕЙСТВИЯ возвращает только пустую папку Recent

Я тщательно скопировал следующий фрагмент кода из более ранней публикации, и он работает, на симуляторе, а также на моем устройстве Nexus 9, до точки!

Однако все, что я получаю, это пустая папка Recent, и я никогда не достигаю кода, который записывает файл.

Что я должен изменить, чтобы получить правильное дерево документов?

   private void testDocumentTree() {

            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
            startActivityForResult(intent, 42);
        }

        public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
            String TAG = "onActivityResult";
            if (resultCode == RESULT_OK) {
                Uri treeUri = resultData.getData();
                DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);

                // List all existing files inside picked directory
                for (DocumentFile file : pickedDir.listFiles()) {
                    Log.d(TAG, "Found file " + file.getName() + " with size " + file.length());
                }

                // Create a new file and write into it
                DocumentFile newFile = pickedDir.createFile("text/plain", "My Novel");
                try {
                    OutputStream out = getContentResolver().openOutputStream(newFile.getUri());
                    out.write("A long time ago...".getBytes());
                    out.close();
                } catch (FileNotFoundException e) {
                    Log.d(TAG, "File Not Found, reason: ", e);
                } catch (IOException e) {
                    Log.d(TAG,"IOException, reason: ", e);
                }
            }
        }

Ответ 1

У меня была такая же проблема, как и у вас.

Я нажал "Показать внутреннее хранилище" в меню переполнения

введите описание изображения здесь

После этого я смог увидеть "Внутреннее хранилище" в ящике

введите описание изображения здесь

Ответ 2

Другие упомянули опцию в DocumentsUI, которую пользователь должен включить вручную. Однако есть и другой вариант. Добавьте эти дополнения в свой ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT, ACTION_CREATE_DOCUMENT или ACTION_OPEN_DOCUMENT_TREE. Кнопка "Исследуйте" в настройках хранилища использует эти дополнительные функции при открытии приложения DocumentsUI. Я думаю, что первого достаточно, чтобы показать внутреннее хранилище и SD-карту. Остальным это хорошо.

intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
intent.putExtra("android.content.extra.FANCY", true);
intent.putExtra("android.content.extra.SHOW_FILESIZE", true);

Ответ 3

Не уверен, что это то, что вы просите, но в папке picker, где вы видите только последнюю папку, есть меню переполнения, в котором вы можете переключаться между SDK SD/SD.

Overflow menu

Ответ 4

Для меня это работает на эмуляторе, но не на реальном телефоне Android 5. Я даже проверил выбор Google Directory android Directory Selection, и он также не работал.

Итак, это, безусловно, ошибка, эффект которой можно увидеть на некоторых телефонах.

Сообщить об ошибке в Google и подождать, пока она не будет исправлена. До этого все, что вы можете сделать, это ограничить доступ к карте памяти в вашем приложении, и это то, что вы, возможно, не захотите делать. Но я думаю, что мы ничего не можем сделать с нашей стороны, прежде чем Google исправит его.

Если вы получите какое-либо обходное решение для этого, вы тоже можете мне рассказать.