Android选择文件URI转绝对路径
在Android开发中,我们经常需要实现选择文件的功能,然后将选择的文件处理或展示出来。然而,当我们使用Intent
启动文件选择器后,返回的结果是一个文件的URI,而不是绝对路径。因此,我们需要将该URI转换为绝对路径,才能进一步操作文件。
什么是URI?
URI(Uniform Resource Identifier),统一资源标识符,是用于标识某一互联网资源名称的字符串。在Android中,文件URI是用来表示文件在存储设备上的唯一标识。
Android中的文件URI的格式类似于:content://media/external/images/media/1234
,其中1234
是文件的ID。不同的文件提供者可能有不同的URI格式。
获取绝对路径的方法
要将文件的URI转换为绝对路径,首先需要确定文件的URI是属于哪种类型的URI。根据文件URI的不同,我们可以有以下几种方法来获取绝对路径。
1. Content URI
如果文件的URI是一个Content URI,我们可以通过查询MediaStore来获取其绝对路径。
public String getRealPathFromURI(Uri contentUri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(contentUri, projection, null, null, null);
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(columnIndex);
cursor.close();
return path;
}
上述代码中,我们使用了getContentResolver().query()
方法来查询MediaStore。通过传入Content URI和需要查询的列,我们可以得到一个Cursor对象。然后,通过cursor.getColumnIndexOrThrow()
方法获取文件路径所在的列的索引,再使用cursor.getString()
方法获取文件路径。
2. File URI
如果文件的URI是一个File URI,我们可以通过URI的getPath()方法直接获取其绝对路径。
public String getRealPathFromURI(Uri fileUri) {
return fileUri.getPath();
}
3. Document URI
如果文件的URI是一个Document URI,我们可以使用DocumentFile类来获取其绝对路径。
public String getRealPathFromURI(Uri documentUri) {
DocumentFile documentFile = DocumentFile.fromSingleUri(this, documentUri);
String filePath = documentFile.getUri().getPath();
return filePath;
}
上述代码中,我们使用DocumentFile.fromSingleUri()
方法将Document URI转换为DocumentFile对象。然后,通过documentFile.getUri().getPath()
方法获取文件的绝对路径。
总结
本文介绍了三种常见的文件URI转换为绝对路径的方法,包括Content URI、File URI和Document URI。通过理解文件URI的不同类型以及相应的转换方法,我们可以在Android开发中更好地处理选择文件后返回的URI,并继续使用和操作文件。
以上所示代码仅为示例,实际应用中需要根据具体情况进行调整和优化。希望本文对于理解和使用Android选择文件URI转换为绝对路径有所帮助。
标签:文件,String,uri,URI,cursor,android,绝对路径,Android From: https://blog.51cto.com/u_16175443/6826515