2010. 12. 3. 20:44

Intent에 의한 사진뷰어, 갤러리, 카메라 제어





Intent는 정말 보면 기존 어플들의 기능을 재사용할 수 있도록 해주는 고마운 기능인것 같습니다. 
사진보기, 갤러리, 카메라는 Intent를 활용하여서 제어를 할 수 있기 때문에 또다시 이런 기능을 또 만들지 않도록 할 수 있고 개발기간을 단축할 수 있으며, 사용자에게도 익숙한 UI 이기때문에 효율성인 측면에서 대단히 좋은 기능이 아닐 수 없습니다. 따라서 이 세가지 기능에 대해서 정리를 해보았습니다.

1. 갤러리 관련 제어
 - 내장되어 있는 갤러리를 호출하여 사진을 선택 후 내가 어떤 사진을 선택했는지 URI로 가지고 데이터를 설정한다. 
 
 - 갤러리 리스트뷰 호출 
Intent i = new Intent(Intent.ACTION_PICK);
i.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
i.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); // images on the SD card.
// 결과를 리턴하는 Activity 호출 startActivityForResult(i, REQ_CODE_PICK_PICTURE);
 - 갤러리 리스트뷰에서 사진 데이터를 가져오는 방법
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQ_CODE_PICK_PICTURE) {
if (resultCode == Activity.RESULT_OK) { 
ImageView img = (ImageView)findViewById(R.id.image);
img.setImageURI(data.getData()); // 사진 선택한 사진URI로 연결하기 
}
}


2. 사진뷰어 호출
// 개별 이미지에 대한 URI 생성
// ex>uri = content://media/external/images/media/4  --> 4 = id
Uri uri = ContentUris.withAppendedId( Images.Media.EXTERNAL_CONTENT_URI, id);  // id값은 사진고유 ID
Intent intend = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intend);


3. 카메라 호출
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);