android 取相册 图片 getContentResolver().query 返回空。

android开发一步一坑,要想适配这种机型覆盖各种版本真是要花点功夫。
今天来说说从系统相册取照片这么一个简单的事情。
一般情况下我们只需要调用系统相册然后在onActivityResult里面接收图片地址剩下的就自己处理就行了。
代码:

private void getPhoto(){
// 相册挑选一张
                    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
                    photoPickerIntent.setType("image/*");
                    startActivityForResult(photoPickerIntent, PICTURE_CHOOSE);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
...
     Cursor cursor = getContentResolver().query(data.getData(),
                            null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    String fileSrc = cursor.getString(idx);
    cursor.close();
    //接到图片地址以后他就是你的了,想干什么就干什么吧。
}

然后你就可以愉快的和图片玩耍了。不过当你玩的很heigh的时候突然测试同学就过来找到了你。嗨,猿猿,我发现这款手机选图片以后就会闪退啊。
黑人问号脸.jpg
你当时是一脸懵逼。
问题就来了。不同的安卓版本下取图片地址的方式发生了变化。在这里我们要对Cursor 做一个是否为空的判断。

if(cursor!=null) {
                        cursor.moveToFirst();
                        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                        fileSrc = cursor.getString(idx);
                        cursor.close();
                    }
                    else
                    {
                        fileSrc=data.getData().getPath();
                    }

就像这样就行了。
好了愉快的玩耍吧。

艾克峰网络科技

你可能感兴趣的:(android 取相册 图片 getContentResolver().query 返回空。)