如何获取我使用 Intent 选择的目录的路径并将其用作文件路径?

How to get path of a directory that I choose with Intent and use it as File path?

单击按钮后,我想创建一个用于浏览文件和选择目录的 Intent。然后我想在共享首选项中存储此目录的路径。稍后我想将此路径用作 File 对象的参数,这样我就可以获取我选择的目录的父目录,或列出其所有文件。问题是,我从 Intent:

得到这条路径

content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata

我在此处阅读 link 并尝试使用游标将内容 Uri 转换为文件 Uri,但出现此错误:

java.lang.UnsupportedOperationException: Unsupported Uri content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata

是因为"Android"和"data"文件夹之前的字符吗?尝试创建游标时总是失败。

这是我想要实现的一个简单示例。我没有包含将 Content Uri 转换为 File Uri 的代码。我几乎尝试了我发现的所有代码,但没有结果。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    button.setOnClickListener {
        val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
        startActivityForResult(intent, SELECT_DIRECTORY)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == SELECT_DIRECTORY) {
            val path = data?.data
            // convert content Uri to File Uri ?
            // store path in shared preferences...
            // later use it in File File(storedPath)
        }
    }
}

甚至不要尝试将内容方案转换为文件方案。

没有理由。

请解释您认为应该这样做的原因。

// store path in shared preferences...

没有。你应该这样做

content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata

那以后就可以用了

好吧,如果你让获得的权限持久化。

我试图在我的文件管理器应用程序中实现 "default folder" 功能并选择一个我想使用其他应用程序的目录,但这对我不起作用。但是感谢@greenapps,我意识到我可以 select 我自己的应用程序中的默认文件夹。