我使用ACTION_OPEN_DOCUMENT运行一个意图。
它返回一个带有“content:/com.android.providers.downloads.documents/document”之类路径的Uri
如何从此返回的Uri中获取正确的路径?
答案 0 :(得分:0)
那是Uri而不是Uri with a path like.
你得到的实际文件是使用以下代码段保存的。
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
答案 1 :(得分:0)
使用系统文件选择器选择任何文件:
val intent = Intent(Intent.ACTION_GET_CONTENT) //ACTION_OPEN_DOCUMENT (same procedure)
intent.type = "*/*"
startActivityForResult(intent, 1)
onActivityResult:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
val file = data?.data?.let {
getFileFromUri(requireContext().contentResolver, uri, requireContext().cacheDir)
}
}
}
获取文件:
private fun getFileFromUri(contentResolver: ContentResolver, uri: Uri, directory: File): File {
val file =
File.createTempFile("suffix", "prefix", directory)
file.outputStream().use {
contentResolver.openInputStream(uri)?.copyTo(it)
}
return file
}
有了文件,我们可以获得进一步处理的实际路径