最近在寫項目再次用到了調用相機相冊裏面的圖片去設置頭像,由於功能不經常使用,很容易忘掉,所以記錄一下小知識點
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根據自己的實際情況定義