我有一个从mediastore图像选择返回的onActivityResult,我可以用下边的代码给一个图像获得一个URI:
Uri selectedImage = data.getData();
把它转换成一个字符串给这个:
content://media/external/images/media/47
或者转换成一个路径给这个::
/external/images/media/47
然后我好像不能找到一个方法把它转换成一个绝对路径,因为我想要把一个图片加载成位图而不用四处复制。我知道这个可以用URI和内容解析器来做,但是这似乎要打破了要一直重启手机,我猜MediaStore不能保持它的在不断重启之间相同的编号。
public String getRealPathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
不要试图在文件系统中找一个uri,这个在数据库中找东西会很慢。
你可以通过提供一个输入流到factory从一个uri得到一个位图,就像你将给文件给factory一样:
InputStream is = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
mActivity.managedQuery()现在已经不赞成用了。下边是代码
private String getRealPathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(mContext, contentUri, proj, null, null, null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}