有个需求就是获取手机本地图片,然后显示:

通过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);
 }
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐