在android 5.5和6.0上面获取图片路径问题

String []imgs1={MediaStore.Images.Media.DATA};//将图片URI转换成存储路径

            Cursor cursor = getContentResolver().query(uri, imgs1, null, null, null); 





          if(cursor.moveToFirst()){
             //最后根据索引值获取图片路径
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);


            path = cursor.getString(column_index);
            save();
          }


          cursor.close();

在模拟器和4.4 5.1 版本都可以正常运行,在6.0和5.5报错

好像只有在小米手机上,cursor可能为空吧需要处理一下,其它的5.0,是没有问题的,6.0没有测试过;
/**
* 解决小米手机上获取图片路径为null的情况
* @param intent
* @return
*/
public Uri getImageUrl(Intent intent) {
Uri uri = intent.getData();
String type = intent.getType();
if (uri.getScheme().equals("file") && (type.contains("image/"))) {
String path = uri.getEncodedPath();
if (path != null) {
path = Uri.decode(path);
ContentResolver cr = this.getContentResolver();
StringBuffer buff = new StringBuffer();
buff.append("(").append(MediaStore.Images.ImageColumns.DATA).append("=")
.append("'" + path + "'").append(")");
Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[] { MediaStore.Images.ImageColumns._ID },
buff.toString(), null, null);
int index = 0;
for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID);
// set _id value
index = cur.getInt(index);
}
if (index == 0) {
// do nothing
} else {
Uri uri_temp = Uri
.parse("content://media/external/images/media/"
+ index);
if (uri_temp != null) {
uri = uri_temp;
}
}
}
}
return uri;
}

是的,先判断一下 if(null == cursor) { uri= getImageUrl(data); }再重新取一下url,再执行一下 你上面哪一部分就可以了