在我的应用程序中,我需要读取文件。 我用:
val launch = rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) {
it?.let {
val checkFile = File(it.path!!)
if (checkFile.extension == "db") {
coroutine.launch(Dispatchers.IO) {
profileVM.load(it, context)
}
}
}
}
但是如果我使用 android api 34 我无法接收文件扩展名并检查它。
但是如果我使用 android api 34 我无法接收文件扩展名并检查它。
如果您的意思是解析
Uri
的路径部分,那么它从来没有可靠地工作过。在现代版本的 Android 上,Uri
通常具有 content
方案,并且路径可以是任意随机字符序列,例如 /questions/77787148/how-to-get-files-extension-from-uri-api-34
。
用户不需要选择具有文件扩展名的内容。现在是 2024 年;依赖文件扩展名已经过时了一两年。
欢迎您使用
DocumentFile.fromSingleUri(it).getName()
。这将返回用户应该识别的文档的“显示名称”。有时,“显示名称”将是传统的文件名,您可以查看它是否以所需的扩展名结尾。但是,同样,“显示名称”不需要是文件名,也不要求用户选择的文件具有任何特定的扩展名。
更好的解决方案是检查内容在数据格式方面是否符合预期,如果内容不符合则优雅地降级。