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开发中,从系统相册选取图片时,不同版本的Android可能会遇到getContentResolver().query返回空的状况,导致应用闪退。通过在onActivityResult中对Cursor进行非空判断可以解决这一问题,确保应用在各版本Android上的兼容性。
6834

被折叠的 条评论
为什么被折叠?



