URI 中的图像路径

4

我正在尝试从相册获取一张图片文件:

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

“选择图片”这一消息没有以Toast的形式显示。

在onActivityResult()方法中:

Uri selectedImageUri = data.getData(); //log shows proper URI
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImageUri,
        projection, null, null, null);
int column_index = cursor
        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String selectedImagePath = cursor.getString(column_index);

cursor.getString(column_index) 返回空值。

我在 Nexus 4 上进行测试。

编辑:

看起来这是 Android 4.4 的问题,我已经看到其他应用程序也出现了失败情况。

将 content:// URI 转换为实际路径在 Android 4.4 中


可能更好的解决方案:https://dev59.com/A3E85IYBdhLWcg3waCxT - Robert
1个回答

8

使用这个:

String selectedImagePath = null;
Uri selectedImageUri = data.getData();
Cursor cursor = activity.getContentResolver().query(
    selectedImageUri, null, null, null, null);
if (cursor == null) { 
    selectedImagePath = selectedImageUri.getPath();
} else {
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    selectedImagePath = cursor.getString(idx);
}

在使用Nexus和Moto G时,我遇到了光标空异常。 - kannan
我遇到了“无法从具有1行6列的CursorWindow读取第0行,第-1列”的错误。 - Iqbal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接