본문 바로가기
Android

[깡쌤의 안드로이드 프로그래밍 with 자바 - 2022 - 쌤즈] 정리 19 - ActivityResultLauncher

by 들풀민들레 2022. 5. 9.

책의 모든 내용을 저자 직강으로 진행한 강의는 ssamz.com 에서 들으실 수 있습니다.

 

 

본 글은 [깡쌤의 안드로이드 프로그래밍 with 자바 - 2022 - 쌤즈] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책 혹은 인강(www.ssamz.com)을 통해 확인해 주세요.

 

10.1.6. 결과 되돌리기 – ActivityResultLauncher


이번에는 androidx에서 제공하는 ActivityResultLauncher로 인텐트를 발생시키고 결과를 되돌려
받는 방법을 살펴보겠습니다. ActivityResultLauncher 방식은 인텐트에 의한 결과를 되돌려 받을
때뿐만 아니라 액티비티에서 무언가를 실행하여 결과를 획득해 무언가를 처리할 때도 사용됩니다. 또한,
퍼미션을 요청할 때도 ActivityResultLauncher를 이용합니다.

 

위 그림에서 ActivityResultLauncher의 구조를 살펴보겠습니다. ActivityResultLauncher에
C o n t r a c t 와 C a l l b ack 객체를 등록한 후 l a u n c h ( ) 함수로 실행합니다. 그러면
ActivityResultLauncher에 등록된 Contract 객체가 실행 요청을 처리하여 그 결과를 Callback에
전달해 사후 처리가 되도록 하는 구조입니다.


Contract는 ActivityResultContract를 상속받은 서브 클래스이며, 직접 만들거나 API에서 제공되는
클래스를 이용합니다. 다음은 API에서 제공되는 Contract 클래스들입니다.

  • PickContract: 선택한 연락처의 Uri 획득
  • RequestPermission: 권한 요청, 허락 여부 파악
  • RequestMultiplePermissions: 여러 권한을 동시에 요청
  • StartActivityForResult: 인텐트 발생으로 액티비티 실행, 결과 획득
  • TakePicturePreview: 사진 촬영 후 비트맵 획득
  • TakePicture: 사진 촬영, 저장, 비트맵 획득


이와 같이 ActivityResultLauncher로 액티비티를 실행시키고 결과를 되돌려 받아야 할 때는
StartActivityForResult를 이용합니다. 또한, 퍼미션 조정을 요청하고 그 결과를 판단할 때는
RequestPermission을 사용합니다.


ActivityResultLauncher 객체는 registerForActivityResult () 함수로 만들어지며, 함수의 매개변수에
작업자인 Contract 객체와 결과를 처리할 Callback 객체를 등록합니다.

 

ActivityResultLauncher<Intent> resultLauncher = registerForActivityResult(
	new ActivityResultContracts.StartActivityForResult(),
	new ActivityResultCallback<ActivityResult>(){
		@Override
		public void onActivityResult(ActivityResult result) {
			Intent intent = result.getData();
			binding.resultTextView.setText(intent.getStringExtra("result"));
		}
	}
);

Callback 객체는 ActivityResultCallback을 구현한 객체이며, 결과를 처리할 때 onActivityResult ()
함수가 자동으로 호출됩니다. 이렇게 만들어진 ActivityResultLauncher 객체의 launch 함수의
매개변수를 호출하면서 실행하고자 하는 Intent 객체로 지정해주면 됩니다.

 

Intent intent = new Intent(this, DetailActivity.class);
resultLauncher.launch(intent);

 

 

책의 모든 내용을 저자 직강으로 진행한 강의는 ssamz.com 에서 들으실 수 있습니다.