您的位置:首页 > 移动开发 > Android开发

android 获取本地图片路径失败,cursor.getString(column_index);返回null

2017-02-17 17:09 1351 查看
今天有个需求就是获取手机本地图片,然后二维码解析结果,跳转网页!

之前我获取图片的代码是这么写的

/*
* 获取带二维码的相片进行扫描
*/
public void pickPictureFromAblum(View v) {
//  打开手机中的相册
Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT);
innerIntent.setType("image/*");
Intent wrapperIntent = Intent.createChooser(innerIntent, "选择二维码图片");
this.startActivityForResult(wrapperIntent, 1);
}


而获取路劲的代码

Uri uri = data.getData();
if (!TextUtils.isEmpty(uri.getAuthority())) {

Cursor cursor = getContentResolver().query(uri, new String[] { MediaStore.Images.Media.DATA }, null, null, null);
if (null == cursor) {
Toast.makeText(this, "图片没找到", Toast.LENGTH_SHORT).show();
return;
}

cursor.moveToFirst();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
photo_path = cursor.getString(column_index);
cursor.close();
} else {
photo_path = data.getData().getPath();
}


之前我在测试机上运行后是能拿到路劲的,但是后来发现在4.4版本后就一直拿不到图片的路径,后来上网查找资料发现

这种方法调用图库并获取图片在android4.4版本之前是可行的,但是之后就不可行了,。根本原因是前者和后者返回的URI已经不是同一个了,前者URI中包含了文件的绝对路径,是有_data的,但是后者URI就没有了。所以你拿不到!

<4.4 URI:content://media/external/images/media/164 含有文件的绝对路径

》4.4URI :content://com.android.providers.media.documents/document/image:3951,只有文件的相对编号

两者返回的内容也有所不同

最终的解决方法其实很简单,就是Intent.ACTION_GET_CONTENT换成Intent.ACTION_PICK

Intent innerIntent = new Intent(Intent.ACTION_PICK); // "android.intent.action.GET_CONTENT"
innerIntent.setType("image/*");
Intent wrapperIntent = Intent.createChooser(innerIntent, "选择二维码图片<
a28a
/span>");
this.startActivityForResult(wrapperIntent, 1);


虽然是个简单的bug,但是也留下点什么 防止后面会有兄弟同样的问题出现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 图片 路径
相关文章推荐