是否可以使用Intent.ACTION_OPEN_DOCUMENT
file:// 格式的 Uri 作为DocumentsContract.EXTRA_INITIAL_URI
额外的,让 DocumentsProvider 在文件的位置开始导航?
在我的应用程序中,我为用户提供了使用自定义设置文件的选项,当他选择此选项时,示例默认文件将在应用程序的数据文件夹中创建(由 返回getExternalFilesDir
)。
选择自定义文件时,我希望 DocumentsProvider 使用 . 打开当前所选文件所在的文件夹EXTRA_INITIAL_URI
。如果某个文件之前选择了 Intent,则没有问题ACTION_OPEN_DOCUMENT
,因为返回的 Uri 是content://
格式的。
在用户第一次选择文件之前存在问题,并且只有创建默认自定义文件的 Uri 可用。文件通过使用File.createNewFile
返回的目录中的使用创建Context.getExternalFilesDir
,并使用使用生成Uri Uri.fromFile(file)
,从而产生file://
格式Uri。
这是一个简单的示例代码:
创建自定义文件。像返回 Urifile:///storage/emulated/0/Android/data/com.example.testsapp/files/customFile.txt
fun createFile(context: Context): Uri {
val appDir = context.getExternalFilesDir(null)
val customFile = File(appDir, "customFile.txt")
customFile.createNewFile()
// writing to customFile via FileOutputStream(file)
return Uri.fromFile(customFile)
}
让用户选择一个自定义文件:
fun pickNewFile(fileUri: Uri) {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "*/*"
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, fileUri)
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true)
startActivityForResult(intent, FILE_PICKER_REQUEST_CODE)
}
当 fileUrifile://
格式化时,DocumentsProvider 将不会在文件目录中打开,而是显示默认目录。用户选择新的自定义文件后,onActivityResult
方法将提供一个新的 Uri,如content://com.android.externalstorage.documents/document/primary%3AAndroid%2Fdata%2Fcom.example.testsapp%2Ffiles%2FcustomFile.txt
当使用此 Uri withpickNewFile
方法时,它将在文件目录中打开。
有没有办法将file://
Uricontent://
类型转换为 Uri 类型?