프로그래밍/안드로이드

[안드로이드] Intent 로 Activity 간에 data 주고 받기

쿠샨 2011. 1. 13. 11:47

단순히 Activity 를 호출  할 때에는 startActivity(Intent intent)를 사용 하지만, Activity 호출 후 호출한 Activity 종료 시 결과 값을 호출한 Activity가 받기 위해서는 startActivityForResult(Intent intent, int requestCode) 를 사용 해야 합니다.


startActivityForResult(Intent intent, int requestCode) 사용 예제

MainActivity 에서 종료 버튼을 누르거나, 메뉴 하드 키를 누르는 2가지 경우 모두 Password Actvity를 호출 하여 암호를 입력 할 수 있도록 하고자 startActivity() 메소드를 사용 하니 Password Activity가 호출은 되나 종료 버튼을 눌러서 호출이 된건지, 메뉴 하드 키를 눌러서 호출이 된 건지 구분 할 방법이 없었습니다. (물론 방법이야  있지만요 ㅎ)

따라서 이런 경우 사용 하기에 적합한 startActivityForResult(Intent intent, int requestCode)를 사용 하였습니다.


Intent로 호출할 Activity를 지정 하고, int requestCode를 Parameter 로 전달
전달된 requestCode 값을 확인 하여 Password Activity를 누가 호출 했는지 확인 하고, 그에 맞는 처리를 할 수가 있었습니다.


지금 제가 사용한 예는 호출된 Activity가 누구로 부터 호출이 되었는지 확인한 예이고,
실제로 data를 넘기기 위해서는 Intent.putExtra() 메소드를 사용 합니다.

                         ex). Intent intent = getIntent();  // 인텐트를 호출한 인텐트를 반환
                                Intent 객체를 생성 하고,
                                intent.putExtra(String password, _value);

Intent에 들어 가는 data는 "key" 역할을 하는 password와 그에 해당 하는 값인 _value가 작을 이루어 저장이 됩니다.
호출 당한 Activity가 정상적으로 끝났음을 알리기 위해서는 setResult(RESULT_OK, intent) 호출로 이루어 집니다.

이런 과정을 진행 후 호출 당한 Activity가 finish() 메소드에 의해 종료 된다면, onActivityResult() 가 호출 됩니다.



사용 예제 소스)

- resultCode는 호출된 Activity 가 정상적으로 종료가 되었을 경우에 RESULT_OK 값을 갖습니다.
            이는 위에서 말한 setResult() 메소드에 의해 셋팅 됩니다.

- requestCode 값을 이용해 password Activity가 호출된 위치를 확인 하고, 각 호출 위치에 맞는 다음 메소드를 호출 할 수가 있습니다.