如何从uri api 34获取文件扩展名

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

在我的应用程序中,我需要读取文件。 我用:

 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 android-jetpack-compose
1个回答
0
投票

但是如果我使用 android api 34 我无法接收文件扩展名并检查它。

如果您的意思是解析

Uri
的路径部分,那么它从来没有可靠地工作过。在现代版本的 Android 上,
Uri
通常具有
content
方案,并且路径可以是任意随机字符序列,例如
/questions/77787148/how-to-get-files-extension-from-uri-api-34

用户不需要选择具有文件扩展名的内容。现在是 2024 年;依赖文件扩展名已经过时了一两年。

欢迎您使用

DocumentFile.fromSingleUri(it).getName()
。这将返回用户应该识别的文档的“显示名称”。有时,“显示名称”将是传统的文件名,您可以查看它是否以所需的扩展名结尾。但是,同样,“显示名称”不需要是文件名,也不要求用户选择的文件具有任何特定的扩展名。

更好的解决方案是检查内容在数据格式方面是否符合预期,如果内容不符合则优雅地降级。

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