개발을 하다보면 사진을 가져오거나 사진 찍기, 이미지 크롭 기능이 필요한 경우가 있습니다. 하지만 이런 기능들을 필요할 때마다 개발을 한다는 건 비효율 적이죠. 그래서 안드로이드는 Intent를 통하여 외부 앱을 적절히 활용 할 수 있도록 도와 줍니다.
사진 가져오기
1 2 3 4 5 6 7 | private void dispatchPickPictureIntent() { Intent pickPictureIntent = new Intent(Intent.ACTION_GET_CONTENT); pickPictureIntent.setType("image/*"); if (pickPictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(pickPictureIntent, REQUEST_IMAGE_PICK); } } |
사진 찍기
1 2 3 4 5 6 7 8 | private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); mUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "edp_image.jpg")); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mUri); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } |
사진 크롭
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void dispatchCropPictureIntent(Uri uri) { Intent cropPictureIntent = new Intent("com.android.camera.action.CROP"); cropPictureIntent.setDataAndType(uri, "image/*"); cropPictureIntent.putExtra("outputX", 640); // crop한 이미지의 x축 크기 (integer) cropPictureIntent.putExtra("outputY", 480); // crop한 이미지의 y축 크기 (integer) cropPictureIntent.putExtra("aspectX", 4); // crop 박스의 x축 비율 (integer) cropPictureIntent.putExtra("aspectY", 3); // crop 박스의 y축 비율 (integer) cropPictureIntent.putExtra("scale", true); cropPictureIntent.putExtra("return-data", true); if (cropPictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(cropPictureIntent, REQUEST_IMAGE_CROP); } } |
결과 처리
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { switch (requestCode) { case REQUEST_IMAGE_PICK: // dispatchPickPictureIntent() 결과 dispatchCropPictureIntent(data.getData()); break; case REQUEST_IMAGE_CAPTURE: // dispatchTakePictureIntent() 결과 dispatchCropPictureIntent(mUri); break; case REQUEST_IMAGE_CROP: // dispatchCropPictureIntent() 결과 Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); mThumbnail.setImageBitmap(ditherBitmap); break; } } } |