cursor.getColumnIndex(MediaStore.Images.Media.DATA)返回-1
有个需求就是获取手机本地图片,然后显示:通过uri获取到本地图片path的代码是这么写的public String getImagePath(Uri uri,String selection){String path = null;Cursor cursor = getContentResolver().query(uri, null, selectio...
·
有个需求就是获取手机本地图片,然后显示:
通过uri获取到本地图片path的代码是这么写的
public String getImagePath(Uri uri,String selection){
String path = null;
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
if(cursor != null){
if(cursor.moveToFirst()){
Log.i(TAG, "cursor.getColumnIndex(MediaStore.Images.Media.DATA:" + cursor.getColumnIndex(MediaStore.Images.Media.DATA));
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
}
cursor.close();
}
return path;
}
会报错,然后打印显示
cursor.getColumnIndex(MediaStore.Images.Media.DATA)返回-1
原因:
这种方法调用图库并获取图片在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
public void getPhone(){
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 1);
}
更多推荐




所有评论(0)