Android 媒体不允许主目录下载
尝试在下载目录中保存PDF文件,但在Android Q之后,Android 媒体不允许主目录下载,android,pdf,save,media,android-10.0,Android,Pdf,Save,Media,Android 10.0,尝试在下载目录中保存PDF文件,但在Android Q之后,getExternalStoragePublicDirectory被完全弃用后,无法将文件保存在DCIM或Pictures文件夹之外的任何其他位置,因为在尝试将文件保存到该位置时引发了以下异常 IllegalArgumentException:不允许下载主目录 content://media/external/images/media; 允许的目录为[DCIM, [图片] 有以下代码 private fun saveFile(input
getExternalStoragePublicDirectory
被完全弃用后,无法将文件保存在DCIM或Pictures文件夹之外的任何其他位置,因为在尝试将文件保存到该位置时引发了以下异常
IllegalArgumentException:不允许下载主目录
content://media/external/images/media; 允许的目录为[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)
}
}
private-fun-saveFile(输入:ByteArray){
val fileName=“myFile.pdf”
val outputStream=if(android.os.Build.VERSION.SDK\u INT
stream.write(输入)
}
}
显然,当更改目录\u DCIM的路径时,一切都按预期工作,但是由于需要,文件应该像以前一样保存到下载。
非常感谢您的帮助。没有为文件保存设置正确的Uri,下载时应该设置正确的Uri
resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues)
感谢您的指点。使用类似MediaStore.Download.Media.EXTERNAL\u CONTENT\u URI的内容保存到下载目录。不要忘记contentValues.put(MediaStore.MediaColumns.RELATIVE\u PATH,Environment.directory\u DOWNLOADS)用于下载=)