最近在写项目再次用到了调用相机相册里面的图片去设置头像,由于功能不经常使用,很容易忘掉,所以记录一下小知识点
1.添加权限
<!-- 许可使用照相机 -->
<uses-permission android:name="android.permission.CAMERA" />
2.调用系统相机
//从相机获取图片
private void getPhotoFromCamera(){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 下面这句指定调用相机拍照后的照片存储的路径
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
Environment.getExternalStorageDirectory(), "head.png")));
startActivityForResult(intent, GET_PHOTO_FROM_CAMERA);
}
3.调用系统相册
//从相册获取图片
private void getPhotoFromAlbum(){
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(intent, GET_PHOTO_FORM_ALBUM);
}
4.调用系统裁剪
//调用系统裁剪照片
private void photoClip(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_CLIP);
}
5.结果处理
调用相机,相册,系统裁剪结果统一在onActivityForResult中处理
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case GET_PHOTO_FROM_CAMERA:
if(resultCode == -1){
L.d("+++++++++++++++++++++++++++++相机回调成功");
File file = new File(Environment.getExternalStorageDirectory()
+ "/head.png");
if (file.exists()) {
photoClip(Uri.fromFile(file));
}
}
break;
case GET_PHOTO_FORM_ALBUM:
L.d("+++++++++++++++++++++++++++++相册回调成功");
if (data != null) {
photoClip(data.getData());
}
break;
case PHOTO_CLIP:
L.d("++++++++++++++++++++++++++++裁剪回调成功");
if (data != null) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
headCircleImageView.setImageBitmap(photo);
}
}
break;
}
}
requestCode根据自己的实际情况定义