【问题标题】:Primary directory Download not allowed for media媒体不允许主目录下载
【发布时间】: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


【解决方案1】:

没有为文件保存设置正确的 Uri,对于下载它应该是

resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues)

blackapps感谢指点。

【讨论】:

  • 不要忘记 contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS) 用于下载 =)
  • 这解决了我的问题,谢谢!
【解决方案2】:

在 Android 11 上,应用无法再访问外部存储中任何其他应用的专用应用特定目录中的文件。为了保护用户隐私,在运行 Android 11 或更高版本的设备上,系统会进一步限制您的应用访问其他应用的私有目录。

请求 MANAGE_EXTERNAL_STORAGE 权限

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage"/>

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 2022-10-14
    • 2017-04-28
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多