当前位置: 首页 > 知识库问答 >
问题:

媒体不允许下载主目录

商曦
2023-03-14

试图在下载目录中保存PDF文件,但在Android Q后,GetExternalStoragePublicDirectory被完全弃用后,除了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时,所有工作都按预期进行,但由于需要,文件应该像以前一样保存到下载中。会很感激任何帮助。

共有1个答案

和和裕
2023-03-14

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

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

blackapps感谢你的指点。

 类似资料:
  • 相对来说,我对Ajax还比较陌生,只是负责这个跨域调用。我们的网页上有一个文本框,用户将使用它来执行公司名称的搜索。通过单击文本框旁边的按钮,将请求Ajax调用。不幸的是,web服务位于一个单独的域中,所以这自然会引起问题。 以下是我为完成这项工作所做的最大努力。我还应该注意,这个调用的目的是以XML格式返回结果,这些结果将在请求的< code>success部分进行解析。 这是再次出现错误消息:

  • 我不能使用loadDataWithBaseURL,因为第二个参数需要html数据。

  • 问题内容: 我正在寻找一种允许用户使用Ajax从我的网站下载文件的方法。我之所以需要这样做是因为文件很大(正常情况下为50兆)。因此,当用户单击下载按钮时,它实际上看起来好像页面没有响应,因为它必须将文件从我的Amazon S3流传输到用户。 因此,我需要通知用户下载正在进行中,甚至可能给他们一个进度条。我找到了以下文章,但我并不热衷于将iFrame注入我的网页。 在此先感谢您的帮助。 问题答案:

  • 问题内容: 我是的网站管理员,并且在CSS中使用@font-face时遇到了很多问题。 我想使用zurb dot com的foundicons,所以我将它们托管在Amazon S3中。 我将存储桶设置为允许此处指定的跨域访问: 一切都开始在webkit,trident和gecko上无缝运行…主要是:当使用firefox浏览Web(测试版本17、18和19)时,所有图标随机失败,并出现以下错误: 我

  • 我正在使用视频Js播放一些HLS流和视频。它在手机、平板电脑和Safari上运行良好,但我在使用chrome和Firefox时遇到了一些问题 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问原点“xxxxxxx”。 或 “Access Control Allow Origin”标头包含多个值“*,*”,但只允许一个值。因此,不允许访问来源“xxxxx

  • 问题内容: 为了解决CORS问题,我在那儿写了 在我的服务器站点中 但是在我的开发过程中,我看到了这个错误 我以为allow-origin:*会解决一切吗?但是为什么说标头包含多个值? 问题答案: 意外两次启用CORS时,这是一个常见问题。检查以确保未在apache中启用它,或者未设置标头两次。作为健全性检查,您可以尝试删除标头并将其重新添加回去,然后再提供响应。 例如: