我的应用程序有一个简单的功能,用户可以下载文件并使用任何其他已安装的应用程序打开或共享该文件。 在Android Q之前,我没有遇到任何问题,但是随着新的隐私更改,我不知道如何正确处理这个问题。
我需要执行以下两个步骤:
- 使用DownloadManager将文件下载到普通设备“下载”文件夹中(而不是应用程序下载文件夹)
- 打开此文件或共享此文件(使用intent)
为了将文件下载到普通的Downloads文件夹中,我使用了下面的代码:
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上,在Intent启动后,我会看到选择目标应用程序的对话框,当我选择目标应用程序后,会出现错误提示,指出此应用程序无法访问该文件(我使用Adobe Reader作为目标应用程序)。
因此,问题是如何在Android 10上正确执行此操作?
P / S / 对不起我的英语不太好。