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에 대해 더 자세한 설명이 필요하다면 여기와 여기를 참고하자.

 

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
108 jetpack compose 란 황제낙엽 2022.12.19 211
107 android jetpack 이란? 황제낙엽 2022.12.19 179
106 구글 ML Kit Vision Quickstart 실행 file 황제낙엽 2022.12.14 95
105 [구글 ML Kit Vision Quickstart 분석] Intro file 황제낙엽 2022.12.13 241
104 Vision API로 카드번호 인식 개발하기(OCR) file 황제낙엽 2022.12.02 126
103 View Binding(뷰 바인딩) 황제낙엽 2022.11.30 116
102 view 객체의 eventlistener 함수 정의와 실행 분석 (StillImageActivity.kt) 황제낙엽 2022.11.29 143
101 람다를 활용한 이벤트 리스너 정의 (자바와 코틀린 비교) 황제낙엽 2022.11.29 227
100 [코틀린] 고차함수와 람다함수 file 황제낙엽 2022.11.29 183
99 코틀린 코루틴 관련 포스트 file 황제낙엽 2022.11.29 170
98 [코틀린] 고차함수 황제낙엽 2022.11.28 165
97 MenuInflater 황제낙엽 2022.11.25 104
96 android gradle plugin 의 kotlin_version 수정 황제낙엽 2022.11.22 232
95 android:exported 황제낙엽 2022.11.22 189
94 [Kotlin/Android] DataBinding 황제낙엽 2022.11.13 207
» startActivityForResult 가 deprecated 된 이유 황제낙엽 2022.11.11 107
92 [코틀린, 카메라 샘플] QRCodeReader (샘플 확인 완료) file 황제낙엽 2022.11.11 223
91 [코틀린, youtube, 안드로이드 앱 만들기] 카메라로 사진 찍기 (샘플 확인 완료) file 황제낙엽 2022.11.11 303
90 용어 사전 황제낙엽 2022.11.04 146
89 Kotlin의 기본 문법 황제낙엽 2022.11.04 376