首先,我想澄清这不是重复的。我已经浏览了 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())
}
}
我该如何解决这个问题?
谢谢你。
好吧,如果有人仍然遇到同样的问题,你可以尝试以下代码:
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()