Uri uri = data.getData();
String[] proj = {MediaStore.Images.Media.DATA};
//Cursor cursor = managedQuery(uri, proj, null, null, null);
Cursor cursor = getContentResolver().query(uri, proj, null, null, null);
无论我是用managedQuery还是用getContentResolver().query在升级了Android6.0的小米4上得到的cursor都是空指针。而其他手机一切正常。求大神解惑
已经解决了
参考文章http://blog.csdn.net/q445697127/article/details/40537945
4.4版本前后的uri形式不同,顶一个
大神,那个网页打不开了,你能说说是怎么解决的吗?
同问,请问是如何解决的
跪求啊,怎么解决的啊
/*
查询相册数据库获取图片路径
/
Uri uri = data.getData();
// String[] proj = {MediaStore.Images.Media.DATA};
// Cursor cursor = managedQuery(uri, proj, null, null, null);
// Cursor cursor = getContentResolver().query(uri, proj, null, null, null);
// if (cursor != null && cursor.getCount() >= 1) {
// while (cursor.moveToNext()) {
// cursor.moveToFirst();
// int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
// path = cursor.getString(column_index);// 图片在的路径
/
打开图片裁剪界面
*/
path = getImageAbsolutePath(EditUserInfoAvtivity.this, uri);
这段代码里面,注掉的部分,就是我提问时的写法,会出现空指针bug。
换成下面的方法以后,问题就解决了:
/**
* 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
*/
public String getImageAbsolutePath(Activity context, Uri imageUri) {
if (context == null || imageUri == null)
return null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, imageUri)) {
if (isExternalStorageDocument(imageUri)) {
String docId = DocumentsContract.getDocumentId(imageUri);
String[] split = docId.split(":");
String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
} else if (isDownloadsDocument(imageUri)) {
String id = DocumentsContract.getDocumentId(imageUri);
Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(mContext, contentUri, null, null);
} else if (isMediaDocument(imageUri)) {
String docId = DocumentsContract.getDocumentId(imageUri);
String[] split = docId.split(":");
String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
String selection = MediaStore.Images.Media._ID + "=?";
String[] selectionArgs = new String[]{split[1]};
return getDataColumn(mContext, contentUri, selection, selectionArgs);
}
} // MediaStore (and general)
else if ("content".equalsIgnoreCase(imageUri.getScheme())) {
// Return the remote address
if (isGooglePhotosUri(imageUri))
return imageUri.getLastPathSegment();
return getDataColumn(mContext, imageUri, null, null);
}
// File
else if ("file".equalsIgnoreCase(imageUri.getScheme())) {
return imageUri.getPath();
}
return null;
}