안드로이드에서 'startActivityForResult'를 관리하는 법
조회수 16785회
한 액티비티에서 startActivityForResult
를 통해 두번째 액티비티를 불러옵니다. 두번째 액티비티에는 해당 액티비티를 종료시키는 몇몇 함수들이 들어있습니다. 일반적으론 결과값을 반환하지 않지만 한 함수만은 결과값을 반환합니다.
예를 들어, 메인 액티비티가 두번째 액티비티를 호출합니다. 이 액티비티는 기기에 카메라가 달려있는지와 같은 몇몇 장비들을 확인합니다. 만약에 장비가 존재하지 않다면 액티비티를 종료합니다. 마찬가지로, MediaRecorder
나 MediaPlayer
를 준비하는 과정에서 문제가 발생하면 액티비티를 종료합니다.
만약 카메라가 존재하고 녹화가 정상적으로 종료되면, 사용자가 완료 버튼을 눌러 녹화가 완료된 뒤, 그 결과(녹화된 비디오의 주소)를 메인 액티비티로 반환합니다.
메인 액티비티에서 결과를 확인하려면 어떻게 해야할까요?
1 답변
-
아래와 같이
FirstActivity
가SecondActivity
를startActivityForResult()
함수를 이용하여 호출한다고 하죠.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
댓글 입력