Как включить выбор файлов Google Docs (хранящихся на Google Диске) с помощью Intent? - PullRequest
1 голос
/ 30 мая 2020

Я хочу в своем приложении Android выбрать файл Google Docs, который хранится на Google Диске, а после этого - прочитать из него некоторые данные (но это выходит за рамки этого вопроса). Итак, для начала я просто хочу нажать на этот файл и получить обратный вызов. Я следую этим рекомендациям на Google Диске Android Устарение API и переход на Google Drive Rest API .

Мне удалось получить диалог со списком файлов Google Диска, но я не могу выбрать файлы Google Docs (я их вижу, но они неактивны, чтобы нажимать на них). В то же время я могу выбрать другие типы файлов - например, PDF, PNG, если я установил их MIME-тип.

Сейчас я использую этот фрагмент кода:

val pickerIntent = Intent(Intent.ACTION_OPEN_DOCUMENT)
pickerIntent.addCategory(Intent.CATEGORY_OPENABLE)
pickerIntent.type = "*/*"
val mimeTypes = arrayOf(
     "application/pdf", // works
     "image/png", //works
     // none of MIME below works
     "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
     "application/vnd.google-apps.document",
     "application/vnd.google-apps.file"
)
pickerIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)

В официальном образце они использовали MIME «text / plain» в качестве примера, поэтому мне это не поможет.

Я пробовал несколько типов MIME, которые смог найти ( здесь и , здесь например), но все они не устранили проблему.

Какой MIME-тип следует использовать для этого? А может проблема не в MIME-типе?

1 Ответ

0 голосов
/ 02 июня 2020

Я обнаружил, что было источником проблемы в статье официальной документации .

Дело в том, что файлы Google Do c - это не то же самое, что «настоящий» PDF | PNG файлы, это так называемые «виртуальные» файлы, поскольку они не имеют двоичного представления.

Ясным ответом на мою проблему является следующее примечание в документации:

Примечание. Поскольку приложение не может напрямую открыть виртуальный файл с помощью метода openInputStream (), не используйте категорию CATEGORY_OPENABLE при создании намерения, содержащего действие ACTION_OPEN_DOCUMENT или ACTION_OPEN_DOCUMENT_TREE

Итак, проблема была решена после того, как я удалил следующую строку:

pickerIntent.addCategory(Intent.CATEGORY_OPENABLE)

Вдобавок я могу признать, что этот фильтр выбора для Google Do c хорошо работает со следующим MIME:

"application/vnd.google-apps.document"
...