안녕하세요 👋
최근에 CameraX + ML Kit을 붙이면서 QR 스캔 기능을 구현하다가 버튼 클릭 이벤트에서 Intent를 잘못 써서 삽질한 경험을 공유하려고 합니다.
혹시 여러분도 비슷한 코드 작성 중이신가요?
QR 촬영 버튼(qrIcon)을 클릭하면 CameraActivity로 이동해야 하고,
스캔이 끝나면 결과를 원래 Activity로 돌려주는 흐름을 만들고 있었습니다.
binding.qrIcon.setOnClickListener {
Toast.makeText(this, "QR scan start", Toast.LENGTH_SHORT).show()
cameraLauncher.launch(intent)
viewModel.onCameraClicked()
}
여기서 intent는 현재 Activity의 getIntent()를 가리키고 있었습니다.
즉, CameraActivity로 가는 게 아니라 자기 자신 Activity를 다시 실행하려는 Intent였던 거죠.
그래서 cameraLauncher의 콜백(onActivityResult)도 안 불리고, 로그도 전혀 찍히지 않았습니다. 이래서 졸릴 땐 작업하지 말고 자야..
binding.qrIcon.setOnClickListener {
Toast.makeText(this, "QR scan start", Toast.LENGTH_SHORT).show()
val cameraIntent = Intent(this, CameraActivity::class.java)
cameraLauncher.launch(cameraIntent)
viewModel.onCameraClicked()
}
Intent(this, CameraActivity::class.java)로 명시적으로 새로운 Activity를 지정해주었습니다.
이제 ActivityResultLauncher가 CameraActivity를 실행하고,
스캔 결과를 안전하게 돌려받을 수 있습니다.
글이 재미있네요 블로그 글 종종 보면서 배우겠습니다.