Почему я не могу открыть загруженный файл на Android Q - PullRequest
0 голосов
/ 30 марта 2020

У меня есть простая функция в моем приложении, пользователь может загрузить файл, а затем открыть его или поделиться им с помощью любого другого установленного приложения. До android Q у меня не было никаких проблем с этим, но с новыми изменениями конфиденциальности я не знаю, как это сделать правильно. Мне нужно сделать следующие два шага:

  1. Загрузить файл, используя DownloadManager, в общую папку загрузок устройства ( не в папке загрузок приложения )
  2. Откройте этот файл или поделитесь этим файлом (используя намерение)

Для загрузки файла в общую папку «Загрузки» я использую следующий код

val request = DownloadManager.Request(config.uri)
    .setTitle(title)
    .setDescription(config.description)
    .setNotificationVisibility(notificationVisibility)
    .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "filename.pdf")
val downloadId = downloadManager.enqueue(request)

и после завершения загрузки я получаю загруженный файл Uri как это

val query = DownloadManager.Query().setFilterById(downloadId)
val cursor = downloadManager.query(query)
val fileUriStr = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))
val fileUri = Uri.parse(fileUriStr)

В конце концов, когда пользователь нажимает кнопку «Открыть», я создаю следующее намерение

val mime = context.contentResolver.getType(fileUri)
val intent = Intent()
    .setAction(Intent.ACTION_VIEW)
    .setDataAndType(uri, mime)
    .addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
    .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

Все эти решения работают должным образом до Android Q. Вкл android Q после запуска намерения я вижу диалоговое окно для выбора целевого приложения, когда я выбираю целевое приложение, я получаю ошибку, что это приложение не может получить доступ к файлу (я использую Adobe Reader в качестве целевого приложения).

Итак, вопрос как правильно выполнить эту операцию на Android 10?

P / S / Извините за мой плохой английский sh

...