【发布时间】:2020-05-25 23:29:29
【问题描述】:
尝试将 PDF 文件保存在下载目录中,但在 Android Q 之后完全弃用 getExternalStoragePublicDirectory 之后,除了 DCIM 或图片文件夹之外,无法将文件保存在任何其他位置,因为尝试保存时会引发以下异常在那里保存文件。
IllegalArgumentException:不允许主目录下载 内容://媒体/外部/图像/媒体;允许的目录是 [DCIM, 图片]
有以下代码。
private fun saveFile(input: ByteArray) {
val fileName = "myFile.pdf"
val outputStream = if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.Q) {
val directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
val file = File(directory, fileName)
FileOutputStream(file)
} else {
val resolver = context.contentResolver
val contentValues = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, fileName)
put(MediaStore.MediaColumns.MIME_TYPE, "images/*")
put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS)
}
resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)?.let {
resolver.openOutputStream(it)
}
}
outputStream?.use { stream ->
stream.write(input)
}
}
显然,当更改 DIRECTORY_DCIM 的路径时,一切都按预期工作,但由于要求,文件应像以前一样保存到下载中。 将不胜感激。
【问题讨论】:
-
使用类似 MediaStore.Download.Media.EXTERNAL_CONTENT_URI 的东西保存到下载目录。
标签: android pdf save media android-10.0