Android6.0 是一个分界线
6.0之后调用 系统相册 data会返回 null
首先,打开系统照相机
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
其次
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PHOTO_REQUEST_GALLERY) {
// 从相册返回的数据
if (data != null) {
// 得到图片的全路径
Uri uri = data.getData();
//裁剪
crop(uri);
}
} else if (requestCode == PHOTO_REQUEST_CAREMA) {
// 从相机返回的数据
if (hasSdcard()) {
crop(Uri.fromFile(tempFile));
} else {
Toast.makeText(MyInfoActivity.this, "未找到存储卡,无法存储照片!", Toast.LENGTH_SHORT).show();
}
} else if (requestCode == PHOTO_REQUEST_CUT) {
// 从剪切图片返回的数据
if (data != null) {
Uri mImageCaptureUri = data.getData();
Bitmap photoBmp = null;
if (mImageCaptureUri != null) {
try {
photoBmp = MediaStore.Images.Media.getBitmap(getContentResolver(), mImageCaptureUri);
//保存
SharedPreferences share = getSharedPreferences("PHOTO_REQUEST_CUT", MODE_PRIVATE);//实例化
SharedPreferences.Editor editor = share.edit(); //使处于可编辑状态
editor.putString("fileName", data.getData().toString());
editor.commit(); //提交数据保存
changeBitmap(photoBmp, PHOTO_REQUEST_CUT, photoBmp + ".jpg");
iv_head_image.setImageBitmap(photoBmp);
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
// 将临时文件删除
tempFile.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
我这里 针对 图像做裁剪 处理 了 ,也放上 代码
/*
* 剪切图片
*/
private void crop(Uri uri) {
// 裁剪图片意图
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image");
intent.putExtra("crop", "true");
// 裁剪框的比例,1:1
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 裁剪后输出图片的尺寸大小
intent.putExtra("outputX", 250);
intent.putExtra("outputY", 250);
intent.putExtra("outputFormat", "JPEG");// 图片格式
intent.putExtra("noFaceDetection", true);// 取消人脸识别
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, 0);
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT
startActivityForResult(intent, PHOTO_REQUEST_CUT);
}
这个时候 data 就不为 空了……