sitelink1 | https://todaycode.tistory.com/121 |
---|---|
sitelink2 | |
sitelink3 |
'startActivityForResult(Intent!, Int): Unit' is deprecated. Deprecated in Java
예전에는 호출한 액티비티로부터 결과를 받아오기 위해 startActivityForResult를 사용했다.
하지만 2020년 5월을 기준으로 deprecated 되고 registerForActivityResult 메서드가 생겨났다.
btn.setOnClickListener {
val intent = Intent(this, WriteActivity::class.java)
startActivityForResult(intent, 0)
}
위 코드는 버튼을 클릭했을 때 '0'이라는 requestCode를 가지고 WriteActivity로 이동하는 코드이다.
WriteActivity에서 작업을 마치고 돌아올 때 그대로 requestCode를 들고 원래 액티비티로 돌아오게 된다.
그러면 이제 그 requestCode에 따라 어떤 액티비티를 갔다 왔는지 알 수 있는 것이다.
그때 사용하는 메서드가 onActivityResult이다.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
0 -> {
// 작업
}
1 -> {
// 작업
}
}
}
원래 액티비티로 돌아오면 onActivityResult 메서드가 호출되는데
이때 requestCode를 이용해서 어떤 액티비티에서 돌아왔는지 구분을 해주고 그에 맞는 작업을 처리해주면 된다.
그리고 이 메서드는 deprecated 되었다
이유는 onActivityResult 코드가 너무 길어지고 Permission 요청이 불편해서 이다
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
0 -> {
// 작업
}
1 -> {
// 작업
}
.
.
.
99 -> {
// 작업
}
}
}
위의 코드처럼 프로젝트가 커지면서 액티비티의 수도 늘어나고 그에 따라 onActivityResult 메서드 안에 들어가는 코드의 양도 굉장히 방대해진다.
// startActivityForResult와 같은 로직
requestPermissions(requiredPermissions, 0)
// onActivityResult와 같은 로직
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when(requestCode) {
0 -> {
}
}
}
기존에는 퍼미션요청을 위와 같이 사용했었다.
앞서 설명한 startActivityForResult, onActivityResult와 메서드 이름과 역할은 다르지만 그 로직은 똑같다.
requestCode로 0을 주고... 사용자에게 권한 요청을 보내러 갔다가 돌아와서 그 결과에 따라 처리를 하는...
이 기존 방법을 사용했을 때 불편한 점은
requestCode에 따라 분기를 나누고 -> 해당 권한을 가지고 있는지 없는지에 따라 또 분기를 나누는데 -> 퍼미션 요청을 여러 개 해야 한다? -> 코드가 난리 법석이 나게 된다.
Activity Result API에서는 이 문제를 해결하기 위해 ActivityResultContracts 개념이 도입되었다.
ActivityResultContracts에 대한 설명은 공식문서와 여기를 참고하자.
만약 Permssion에 대해 더 자세한 설명이 필요하다면 여기와 여기를 참고하자.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
108 | jetpack compose 란 | 황제낙엽 | 2022.12.19 | 0 |
107 | android jetpack 이란? | 황제낙엽 | 2022.12.19 | 1 |
106 | 구글 ML Kit Vision Quickstart 실행 | 황제낙엽 | 2022.12.14 | 0 |
105 | [구글 ML Kit Vision Quickstart 분석] Intro | 황제낙엽 | 2022.12.13 | 1 |
104 | Vision API로 카드번호 인식 개발하기(OCR) | 황제낙엽 | 2022.12.02 | 0 |
103 | View Binding(뷰 바인딩) | 황제낙엽 | 2022.11.30 | 0 |
102 | view 객체의 eventlistener 함수 정의와 실행 분석 (StillImageActivity.kt) | 황제낙엽 | 2022.11.29 | 0 |
101 | 람다를 활용한 이벤트 리스너 정의 (자바와 코틀린 비교) | 황제낙엽 | 2022.11.29 | 0 |
100 | [코틀린] 고차함수와 람다함수 | 황제낙엽 | 2022.11.29 | 0 |
99 | 코틀린 코루틴 관련 포스트 | 황제낙엽 | 2022.11.29 | 0 |
98 | [코틀린] 고차함수 | 황제낙엽 | 2022.11.28 | 0 |
97 | MenuInflater | 황제낙엽 | 2022.11.25 | 0 |
96 | android gradle plugin 의 kotlin_version 수정 | 황제낙엽 | 2022.11.22 | 1 |
95 | android:exported | 황제낙엽 | 2022.11.22 | 0 |
94 | [Kotlin/Android] DataBinding | 황제낙엽 | 2022.11.13 | 0 |
» | startActivityForResult 가 deprecated 된 이유 | 황제낙엽 | 2022.11.11 | 1 |
92 | [코틀린, 카메라 샘플] QRCodeReader (샘플 확인 완료) | 황제낙엽 | 2022.11.11 | 0 |
91 | [코틀린, youtube, 안드로이드 앱 만들기] 카메라로 사진 찍기 (샘플 확인 완료) | 황제낙엽 | 2022.11.11 | 0 |
90 | 용어 사전 | 황제낙엽 | 2022.11.04 | 0 |
89 | Kotlin의 기본 문법 | 황제낙엽 | 2022.11.04 | 0 |