2 yijidemomo yijidemomo 于 2012.10.25 14:14 提问

从mediastore的uri中获得文件名和路径

我有一个从mediastore图像选择返回的onActivityResult,我可以用下边的代码给一个图像获得一个URI:

 Uri selectedImage = data.getData();

把它转换成一个字符串给这个:

content://media/external/images/media/47

或者转换成一个路径给这个::

/external/images/media/47

然后我好像不能找到一个方法把它转换成一个绝对路径,因为我想要把一个图片加载成位图而不用四处复制。我知道这个可以用URI和内容解析器来做,但是这似乎要打破了要一直重启手机,我猜MediaStore不能保持它的在不断重启之间相同的编号。

3个回答

niangzhi
niangzhi   2012.10.25 15:37
已采纳
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);
    }
liangchichexin
liangchichexin   2012.10.25 16:08

不要试图在文件系统中找一个uri,这个在数据库中找东西会很慢。

你可以通过提供一个输入流到factory从一个uri得到一个位图,就像你将给文件给factory一样:

InputStream is = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
gouxiaojin
gouxiaojin   2012.10.25 16:39

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);
}
qq_26734607
qq_26734607 回复liwen320922: 层主解决了么?我想获取office文件路径,怎么写?
接近 2 年之前 回复
liwen320922
liwen320922 回复who52023: 这个是得到图片的,那我想得到的所有的,不单单是图片,该怎么写
大约 2 年之前 回复
liwen320922
liwen320922 这个是得到图片的,那我想得到的所有的,不单单是图片,该怎么写
大约 2 年之前 回复
ding630345720
ding630345720 为啥我用这段代码不管用啊
大约 2 年之前 回复
who52023
who52023 回复Jean0626: 上下文
2 年多之前 回复
Jean0626
Jean0626 什么是mContext
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!