안드로이드에서 'startActivityForResult'를 관리하는 법

조회수 16761회

한 액티비티에서 startActivityForResult를 통해 두번째 액티비티를 불러옵니다. 두번째 액티비티에는 해당 액티비티를 종료시키는 몇몇 함수들이 들어있습니다. 일반적으론 결과값을 반환하지 않지만 한 함수만은 결과값을 반환합니다.

예를 들어, 메인 액티비티가 두번째 액티비티를 호출합니다. 이 액티비티는 기기에 카메라가 달려있는지와 같은 몇몇 장비들을 확인합니다. 만약에 장비가 존재하지 않다면 액티비티를 종료합니다. 마찬가지로, MediaRecorderMediaPlayer를 준비하는 과정에서 문제가 발생하면 액티비티를 종료합니다.

만약 카메라가 존재하고 녹화가 정상적으로 종료되면, 사용자가 완료 버튼을 눌러 녹화가 완료된 뒤, 그 결과(녹화된 비디오의 주소)를 메인 액티비티로 반환합니다.

메인 액티비티에서 결과를 확인하려면 어떻게 해야할까요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    아래와 같이 FirstActivitySecondActivitystartActivityForResult() 함수를 이용하여 호출한다고 하죠.

    Intent i = new Intent(this, SecondActivity.class);
    startActivityForResult(i, 1);
    

    SecondActivity에서는 FirstActivity에 반환할 데이터를 세팅하고, 만약에 반환할 값이 없다면 아무 값도 세팅하지 않으시면 됩니다.

    예를 들어 : SecondAcivity에서 반환할 값이 있다면 :

    Intent returnIntent = new Intent();
    returnIntent.putExtra("result",result);
    setResult(Activity.RESULT_OK,returnIntent);
    finish();
    

    반대로 반환할 값이 없다면 :

    Intent returnIntent = new Intent();
    setResult(Activity.RESULT_CANCELED, returnIntent);
    finish();
    

    와 같이 구성할 수 있습니다. FirstActivity 클래스에는 onActivityResult() 함수에 아래와 같은 코드를 구성하시면 됩니다.

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
        if (requestCode == 1) {
            if(resultCode == Activity.RESULT_OK){
                String result=data.getStringExtra("result");
            }
            if (resultCode == Activity.RESULT_CANCELED) {
                //만약 반환값이 없을 경우의 코드를 여기에 작성하세요.
            }
        }
    }//onActivityResult
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)