Android如何通过Uri.getPath()获得真实路径?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我正在尝试从图库中获取图片。

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select picture"), resultCode );

在我从这个活动回来后,我有一个数据,其中包含Uri。看起来像:

content://media/external/images/1

我如何将此路径转换为真正的路径(就像' /sdcard/image.png')?

谢谢

提问于
用户回答回答于

你真的有必要得到一个物理路径吗? 例如,ImageView.setImageURI()ContentResolver.openInputStream()允许你在不知道其真实路径的情况下访问文件的内容。

用户回答回答于

我就是这样做的:

Uri selectedImageURI = data.getData();
imageFile = new File(getRealPathFromURI(selectedImageURI));

以及:

private String getRealPathFromURI(Uri contentURI) {
    String result;
    Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
    if (cursor == null) { // Source is Dropbox or other similar local file path
        result = contentURI.getPath();
    } else { 
        cursor.moveToFirst(); 
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
        result = cursor.getString(idx);
        cursor.close();
    }
    return result;
}

注:managedQuery()方法是不推荐的,所以我不使用它。

扫码关注云+社区