【问题标题】:How can I read File from MediaStore in Relative Path?如何在相对路径中从 MediaStore 读取文件?
【发布时间】:2020-08-16 09:44:36
【问题描述】:

在 Android 10 或更高版本中,我使用 MediaStore 将文件保存在下载、共享存储中。 我用来保存文件的代码如下:

        GlobalScope.launch {
        val values = ContentValues().apply {
            put(MediaStore.Downloads.DISPLAY_NAME, "file.txt")
            put(MediaStore.Downloads.MIME_TYPE, "text/plain")
            put(MediaStore.Downloads.IS_PENDING, 1)
            put(MediaStore.Downloads.RELATIVE_PATH,Environment.DIRECTORY_DOWNLOADS+ File.separator+"MyApp/SubDir")
        }

        val collection = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
        val item = contentResolver.insert(collection, values)!!

        contentResolver.openFileDescriptor(item, "w", null).use {
            FileOutputStream(it!!.fileDescriptor).use { outputStream ->
                outputStream.write("test file".toByteArray())
                outputStream.close()
            }
        }

        values.clear()
        values.put(MediaStore.Images.Media.IS_PENDING, 0)
        contentResolver.update(item, values, null, null)

现在我的文件保存在 Downloads/myApp/subDir/file.txt

如果是这样,如果我不知道这个文件的 Uri 但知道用来保存它的 RELATIVE_PATH,我该如何读取这个文件?

【问题讨论】:

    标签: android uri mediastore


    【解决方案1】:

    现在可以在SimpleStorage 的帮助下实现:

    val fileList = MediaStoreCompat.fromRelativePath(this, Environment.DIRECTORY_DOWNLOADS)
    
    val singleFile = MediaStoreCompat.fromRelativePath(this, Environment.DIRECTORY_DOWNLOADS + "/MyApp/SubDir/", "file.txt")
    

    【讨论】:

    • 补充答案,对于 Java,我们不能像这样访问 fromRelativePath() 方法,因为 Java 认为它是从静态上下文中调用它,所以我们可以做的是 MediaStoreCompat.INSTANCE.fromRelativePath(getContext(), Environment.DIRECTORY_DOWNLOADS + "/MyApp/SubDir/", "file.txt");跨度>
    • 我很欣赏创建库,但这是对问题的不完整答案:这显示了如何获得某种“句柄”(类型 DocumentFile),而不是如何实际阅读它,如获取 InputStream 或将其复制到其他地方。使用这样的示例扩展 SimpleStorage README 也将不胜感激
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2013-11-21
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多