如何获取我使用 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 我自己的应用程序中的默认文件夹。
单击按钮后,我想创建一个用于浏览文件和选择目录的 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 我自己的应用程序中的默认文件夹。