Storage Access Framework - Разве приложение выбора файлов не реализует ACTION_OPEN_DOCUMENT_TREE в облаке? - PullRequest
0 голосов
/ 19 июня 2019

Очевидно, что приложение "Подбор файлов" не полностью реализует намерение ACTION_OPEN_DOCUMENT_TREE.

Допустим, этот код выполняется:

 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
            intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            intent.setType("vnd.android.document/directory");
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            startActivityForResult(intent, OPEN_DIRECTORY_REQUEST_CODE);

Выдается эта ошибка:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.OPEN_DOCUMENT_TREE cat=[android.intent.category.OPENABLE] typ=vnd.android.document/directory flg=0x43 }

то же самое с этим альтернативным типом "application / vnd.google-apps.folder"

или не включая строку, в которую добавлена ​​категория OPENABLE

или используя intent.setType(DocumentsContract.Document.MIME_TYPE_DIR);

while, если этот код выполняется:

 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
            intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            startActivityForResult(intent, OPEN_DIRECTORY_REQUEST_CODE);

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

Если ACTION_OPEN_DOCUMENT используется следующим образом:

            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
            intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            intent.setType("*/*");
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            startActivityForResult(intent, OPEN_FILE_REQUEST_CODE);

Облачные корни (только в облачном домене Drive, я думаю, единственное приложение, которое реализует SAF) доступны и файлы можно выбирать.

Я экспериментировал и реализовал Storage Access Framework. Смотрите, например, этот вопрос:

Storage Access Framework - не удалось получить дерево документов из URI (возвращено из приложения Drive)

где вы можете видеть, что эта функциональность существует, хотя это своего рода хак и относится к созданию папки, а не к ее выбору (папка должна быть «деревом документов»).

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

В противном случае, как официально попросить Google сделать так, чтобы приложение SAF "средства выбора файлов" правильно реализовало намерение ACTION_OPEN_DOCUMENT_TREE для облачного домена, созданное ими для собственной Storage Access Framework на Android? Надеюсь, это уже реализовано, на самом деле.

...