Использование mimetype 'application / octet-stream' со средством выбора SAF работает для локальных файлов, но не для тех же файлов в Google Диске - PullRequest
2 голосов
/ 30 апреля 2020

Я выполняю рефакторинг своей функции резервного копирования / восстановления для работы с Storage Access Framework. Мои резервные копии - это zip-файлы с пользовательскими расширениями (.dtt). Если я пытаюсь открыть средство выбора с помощью следующего кода, мои файлы .dtt можно выбрать из локального каталога загрузок, но не из каталога на Google Диске. Как сделать этот файл доступным для выбора даже с Google Диска?

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/octet-stream");
startActivityForResult(intent, OPEN_SAF_PICKER_REQUEST_CODE);

Обратите внимание, как файл резервной копии можно выбрать из локального каталога «Загрузки», но выделен серым цветом в каталоге «Резервные копии» на Google Диске:

local Downloads directory

Google Drive directory

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

1 Ответ

0 голосов
/ 30 апреля 2020

Я нашел рабочее решение. Похоже, что Google Drive изменяет тип mime моих файлов на «application / x-zip» после их загрузки. Поэтому мне нужно учесть оба типа пантомимы, чтобы мои файлы можно было выбирать в обоих местах:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
String[] mimeTypes = {"application/octet-stream","application/x-zip"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
startActivityForResult(intent, OPEN_SAF_PICKER_REQUEST_CODE);

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

...