Android 文件绝对路径和Content开头的Uri互相转换

发布时间 2023-11-13 10:11:38作者: 开发进行曲

最近在做一个项目时,需要做一个九宫格选择图片上传的功能,最后拿到的图片地址是文件的绝对路径地址,我需要的是Content开头的Uri,所以需要做一个转换

查阅资料找到如下方法,代码如下:

//路径文件转成URI
public static Uri getImageContentUri(Context context, java.io.File imageFile) {

String filePath = imageFile.getAbsolutePath();

Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=? ",

new String[]{filePath}, null);

if (cursor != null && cursor.moveToFirst()) {

@SuppressLint("Range")
int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));

Uri baseUri = Uri.parse("content://media/external/images/media");

return Uri.withAppendedPath(baseUri, "" + id);

} else {

if (imageFile.exists()) {

ContentValues values = new ContentValues();

values.put(MediaStore.Images.Media.DATA, filePath);

return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

} else {

return null;

}
}
}


//Uri转绝对路径
public static String getFilePathFromContentUri(Uri selectedVideoUri, ContentResolver contentResolver) {

String filePath;

String[] filePathColumn = {MediaColumns.DATA};

Cursor cursor = contentResolver.query(selectedVideoUri, filePathColumn, null, null, null);

// 也可用下面的方法拿到cursor

// Cursor cursor = this.context.managedQuery(selectedVideoUri, filePathColumn, null, null, null);

cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);

filePath = cursor.getString(columnIndex);

cursor.close();

return filePath;

}