将 Uri 转换为文件时,Uri 缺少“文件”方案

问题描述 投票:0回答:1

首先,我想澄清这不是重复的。我已经浏览了 Stack Overflow 上具有类似主题但无法找到解决方案的每个问题。我也浏览了文档,但没有具体提到这个问题。

我正在尝试使用 Kotlin 中的

.toFile()
将 Uri 转换为文件;但是,它会抛出一个错误:

java.lang.IllegalArgumentException: Uri lacks 'file' scheme: content://com.android.externalstorage.documents/document/primary%3Asample.txt
         at androidx.core.net.UriKt.toFile(Uri.kt:43)

我已通过文件选择器访问了该文件,并且我还请求了

READ_EXTERNAL_STORAGE
。虽然可以选择该文件,但它会引发我上面提到的错误。访问文件的代码如下所示:

 val activityResultLauncher =
        rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? ->
            val file = uri?.toFile()
            if (file != null) {
                Log.d("data file", file.readText())
            }
        }

我该如何解决这个问题?

谢谢你。

android kotlin uri
1个回答
0
投票

好吧,如果有人仍然遇到同样的问题,你可以尝试以下代码:

 val activityResultLauncher =
        rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? ->
            val file = createTempFile()
            uri?.let { context.contentResolver.openInputStream(it) }.use { input ->
                file.outputStream().use { output ->
                    input?.copyTo(output)
                }
            }
            Log.d("txt content", file.readText())
            file.delete()

了解更多背景信息:https://stackoverflow.com/a/49221353/22091687

© www.soinside.com 2019 - 2024. All rights reserved.