본문 바로가기

Daily Sample

[Day23] StartActivityForResult 으로 실행되는 Androday Camera App 소스

TITLE : Androday Image App 

Date : 2010/11/10

Description : 

This is Source that Androday Image App by excuting StartActivityForResult

Download Link : 

Reference Site :  Android API, http://chiyo85.tistory.com/entry/Android-Bitmap-Object-Resizing-Tip , http://www.androidpub.com/837593

StartActivity 의 중요성을 다시 생각해보게 하는 예제 이다.

안드로이드는 내외부적으로 Intent를 통해서 서로 연결이 되는 협력체 이다.

예를들어, 안드로이드 동네에서는 동사무소에서 삽하나 빌리기 위해서는 Intent에 자기성함과 IntentFilter를 입력해야만 빌려준다는 뜻이다. (유치한 표현 ㅎㅎ;) 

특히나, 안드로이드에서 기본제공되는 겔러리/카메라/연락처/스케쥴 등 기본App을 본인에 App에 사용하기 위해서는

일종의 Callback 구조의 StartActivityForResult를 사용해서 기본 App을 실행해 주어야 각종 Image/연락처/데이터 등을 Intent를 통해서 받아올 수 있다.

오늘은 사진겔러리와 카메라를 이용해서 이미지를 가져오는 App을 만들어본다.

 1. 처음 이미지뷰를 누르면 아래와 같은 다이얼로그가 뜨게하는데 버튼 구조가 안드로이드에서 제공하는 형태가 아님으로 ,  AlertDialog.Builder를 사용해서 Custom Dialog창 을 만들어준다.

Builder bld = new AlertDialog.Builder(this);

   bld.setTitle(“이미지 선택”);

   bld.setPositiveButton(“취소”, new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {         

       //취소 버튼은 눌렀을 때 종료

    }
   });

   LinearLayout linear = (LinearLayout) View.inflate(MainActivty.this,
     R.layout.custom_dialog, null);

//Custom Dialog를 만들기 위한 미리 배치한 Layout을 생성 

   bld.setView(linear);

//리니어(뷰) 적용

 

2. 앨범선택을 눌렀을 때 동작을 구현한다.

StartActivityForResult로 실행해서 나중에 돌아오는 값을 onActivityResult()에서 사용할 수 있다.

Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
     intent.setType(“image/*”);
     startActivityForResult(intent, requestCode1);

//requestCode = 1004 로 겔러리를 실행시킨다.  나중에 값이 돌아올때 1004 로 돌아온다.

     dismissDialog(CUSTOM_DIALOG_BOX);

//Custom 다이얼로그 종료

 


3. 사진선택을 눌렀을 때 동작을 구현한다.

StartActivityForResult로 실행해서 나중에 돌아오는 값을 onActivityResult()에서 사용할 수 있다.

 Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
     startActivityForResult(i, requestCode2);

//requestCode = 1005 로 겔러리를 실행시킨다.  나중에 값이 돌아올때 1005 로 돌아온다.

     dismissDialog(CUSTOM_DIALOG_BOX);

//Custom 다이얼로그 종료

 

4. 겔러리나 카메라를 실행하고 돌아왔을 때의 작동을 구현하는데 이때 ResultCode의 값은 1(RESULT_OK)이다.

또한, 백버튼을 눌러서 App을 취소했을 때도 구현하는데 이때 ResultCode의 값은 0(RESULT_CANCEL)이다.

onActivityResult()를 오버라이드해서 구현할 수 있다.

 if (requestCode == requestCode1 && resultCode == RESULT_OK) {

           // 겔러리에서 사진을 가져온 후 내용 구현. 사진은 Data 객체에 전달되서 온다.
        }  

  else if (requestCode == requestCode2 && resultCode == RESULT_OK) { 

           // 카메라에서 사진을 가져온 후 내용 구현. 사진은 Data 객체에 전달되서 온다.

      }
  else // resultCode = 0
  {

   Toast.makeText(getApplicationContext(), “이미지 선택 취소”,Toast.LENGTH_SHORT).show();

//백버튼으로 눌러서 취소했을 경우도 구현해 준다.
  }
 }

5. Bitmap 객체를 가져온 후 한가지 기능을 더해주는데 하얀 영역에 이미지를 추가할때 Round 처리를 해주는 부분이다.

Util클래스에 Static 함수로 정의되어 있다. (어디서 가져온 자바 소스인지 불확실;)

    Bitmap rectImage = Utils.getRoundedCornerBitmap(this, profileBitmap, 10);

 
<P.S> 본 예제는 간단한 구현을 위해서 Bitmap데이터를 직접가져와서 처리하였다.

좀더 정밀한 이미지 작업이나 처리를 위해서는 http://www.androidpub.com/837593 에 나와있는 방법으로 Cusor를 통해서 가져온다.

Creative Commons License
이 저작물은 크리에이티브 커먼즈 저작자표시 3.0 Unported 라이선스에 따라 이용할 수 있습니다.