Android获取真实路径的方法
在Android开发中,有时我们需要获取文件的真实路径,例如从相册中选择一张照片后,需要获取其真实路径以进行操作。但是在Android系统中,文件的路径并不总是直接可见的,这就需要我们通过一些方法来获取这些文件的真实路径。
1. 通过Uri获取真实路径
在Android中,当我们从相册中选择一张照片后,会返回一个Uri,这个Uri并不是直接可用的文件路径。我们可以通过以下方法获取其真实路径:
public String getRealPathFromUri(Uri uri) {
String realPath = null;
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if(cursor != null && cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
realPath = cursor.getString(columnIndex);
}
if(cursor != null) {
cursor.close();
}
return realPath;
}
2. 通过DocumentFile获取真实路径
在Android 4.4及以上版本中,我们可以使用DocumentFile来获取文件的真实路径:
public String getRealPathFromDocumentUri(Uri uri) {
String realPath = null;
String wholeID = DocumentsContract.getDocumentId(uri);
String id = wholeID.split(":")[1];
String[] column = {MediaStore.Images.Media.DATA};
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{id}, null);
if(cursor != null && cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndex(column[0]);
realPath = cursor.getString(columnIndex);
}
if(cursor != null) {
cursor.close();
}
return realPath;
}
3. 通过ContentResolver获取真实路径
另一种方法是通过ContentResolver来获取文件的真实路径:
public String getRealPathFromContentUri(Uri uri) {
String realPath = null;
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
if(cursor != null && cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
realPath = cursor.getString(columnIndex);
}
if(cursor != null) {
cursor.close();
}
return realPath;
}
通过以上方法,我们可以轻松地获取文件的真实路径,方便我们进行后续操作。
状态图
stateDiagram
[*] --> GetUri
GetUri --> GetRealPathFromUri: 通过Uri获取真实路径
GetUri --> GetRealPathFromDocumentUri: 通过DocumentFile获取真实路径
GetUri --> GetRealPathFromContentUri: 通过ContentResolver获取真实路径
在Android开发中,获取文件的真实路径是一个常见的需求,通过以上方法,我们可以轻松地实现这一功能。希望本文对您有所帮助!