android - 媒体不允许主目录下载

标签 android pdf save media android-10.0

试图在下载目录中保存 PDF 文件,但在 getExternalStoragePublicDirectory 之后在 Android Q 之后完全弃用,除了 DCIM 或 Pictures 文件夹之外,无法将文件保存在任何其他位置,因为在尝试将文件保存在那里时会引发以下异常。

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 - 媒体不允许主目录下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60153914/

相关文章:

android - 将 ?attr/selectableItemBackground 添​​加到 View 并设置背景颜色

android - 为什么用户代理发送为 "Apache-HttpClient/UNAVAILABLE (java 1.4)”

android - 如何忽略使用 gradle 进行 lint 检查的完整文件夹?

java - 签名字段中的"Lock"字典是签名后签名损坏的原因

java - 将 ALTO XML 转换为格式化的 PDF/RTF/TXT?

javascript - 通过 Javascript 保存到 Parse 时出现问题

C# 使用 .txt 处理数组

python - 无法保存matplotlib动画

android - 将元数据添加到 xamarin.android 中的 Activity

java - 使用java和itext生成带有Unicode字符的PDF文档