Некоторые медиа-провайдеры блокируют пользовательский интерфейс при вызове MediaStore - PullRequest
0 голосов
/ 26 апреля 2020

Я звоню MadiaStore вот так (после запроса разрешений):

Intent intent = new Intent();
intent.setType("application/zip");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select File"), SELECT_RESTORE_REQUEST);

Затем я перехожу на Google Drive и выбираю файл, и Uri возвращается в onActivityResult.

Затем я пытаюсь получить Cursor, запрашивая преобразователь контента, как показано ниже:

// I'm doing this to get the file size etc
Cursor mCursor = context.getContentResolver().query(mUri, null, null, null, null);

Проблема в том, что файл еще не доступен (Google Drive находится в процессе скачать его). Пользовательский интерфейс блокируется, отображая черный экран, пока файл не будет доступен, а затем приведенный выше вызов будет вызван / вызван.

Я попытался вызвать вышеупомянутый в AsyncTask - Это работает для блокировки пользовательского интерфейса , но вызывает вышеупомянутое только после загрузки.


Некоторые провайдеры, такие как Dropbox, сначала загружают контент перед возвратом Uri.


Мой вопрос:

Есть ли способ, которым мы можем предотвратить это (например, получить прогресс загрузки файла, по крайней мере, )? Если нет, что вы предлагаете?

Обратите внимание - я использовал Google Диск только в качестве примера, OneDrive имеет ту же проблему.

Также - Вы можете воспроизвести это, очистив данные приложения Google Drive, затем вызов выше. Это заметно заметно при выборе размера файла 5МБ>

...