媒体不允许下载主目录
Primary directory Download not allowed for media
尝试将 PDF 文件保存在下载目录中,但在 getExternalStoragePublicDirectory
在 Android Q 之后完全弃用后,无法将文件保存在 DCIM 或图片文件夹以外的任何其他位置,因为尝试在此处保存文件时抛出以下异常。
IllegalArgumentException: Primary directory Download not allowed for
content://media/external/images/media; allowed directories are [DCIM,
Pictures]
有如下代码。
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 时,一切都按预期进行,但由于要求,文件应像以前一样保存到下载。
非常感谢任何帮助。
没有为文件保存设置正确的 URI,对于下载它应该是
resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues)
blackapps感谢指点
在 Android 11 日,应用程序无法再访问外部存储中任何其他应用程序专用的、特定于应用程序的目录中的文件。为了保护用户隐私,在 运行 Android 11 或更高版本的设备上,系统进一步限制您的应用访问其他应用的私有目录。
请求MANAGE_EXTERNAL_STORAGE许可
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage"/>
尝试将 PDF 文件保存在下载目录中,但在 getExternalStoragePublicDirectory
在 Android Q 之后完全弃用后,无法将文件保存在 DCIM 或图片文件夹以外的任何其他位置,因为尝试在此处保存文件时抛出以下异常。
IllegalArgumentException: Primary directory Download not allowed for content://media/external/images/media; allowed directories are [DCIM, Pictures]
有如下代码。
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 时,一切都按预期进行,但由于要求,文件应像以前一样保存到下载。 非常感谢任何帮助。
没有为文件保存设置正确的 URI,对于下载它应该是
resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues)
blackapps感谢指点
在 Android 11 日,应用程序无法再访问外部存储中任何其他应用程序专用的、特定于应用程序的目录中的文件。为了保护用户隐私,在 运行 Android 11 或更高版本的设备上,系统进一步限制您的应用访问其他应用的私有目录。
请求MANAGE_EXTERNAL_STORAGE许可
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage"/>