onActivityResult 를 알아보기

Android 2015. 4. 1. 17:54

http://developer.android.com/reference/android/app/Activity.html


1
protected void onActivityResult (int requestCode, int resultCode, Intent data)
cs

말 그대로 다른 Activity가 종료될 경우에 그 Activity로부터 requestCode, resultCode, data를 받아와 처리할 수 있는 메소드.

각 인자들의 의미는 아래에.

requestCode - startActivityForResult를 통해 전달된 requestCode로 결과값이 어떤 Activity로부터 전달되었는지 판단할 수 있게 한다.

resultCode - 자식 Activity의 setResult()를 통해 전달된 resultCode로 처리상태를 전달.

data - activity로부터 전달받은 data


요 메서드와 함께 사용하는 다른 친구메서드가 있는데 그 놈이 바로

1
public void startActivityForResult (Intent intent, int requestCode)
cs

Activify를 시작하면서 구분자 requestCode를 함께 전달할 수 있다.


구글 예제를 보면 

1
2
3
4
5
6
7
static final int PICK_CONTACT_REQUEST = 1;  // The request code
...
private void pickContact() {
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}
cs

요런 식으로 Intent를 생성하여 startActivityForResult 메서드를 통해 intent, requestCode를 함께 전달하고 있다.

activity에서 전달받은 값들을 처리하는 코드를 보면..

1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == PICK_CONTACT_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // The user picked a contact.
            // The Intent's data Uri identifies which contact was selected.
 
            // Do something with the contact here (bigger example below)
        }
    }
}


cs

앞서 startActivityForResult를 통해 전달한 requestCode의 처리결과 resultCode를 받기 위해 대기하고 있다.

RESULT_OK 뿐만 아니라 RESULT_CANCELED 정상처리가 되지 않았을 경우에 대응하는 코드도 작성할 수 있다.

: