인프런 커뮤니티 질문&답변

atg0614님의 프로필 이미지
atg0614

작성한 질문수

[2023 코틀린 강의 무료제공] 기초에서 수익 창출까지, 안드로이드 프로그래밍 A-Z

메인 액티비티 - 권한 기능 추가 (2)

Permission Request Code 와 requestCode가 같은지 if문에서 확인하는 이유가 무엇인가요?

작성

·

301

0

이 부분 if문에 있는 조건이 잘 이해가 가지않습니다.

함수를 보낼 때 인자로 값을 보내고,

매개변수로 받아온 값을 그대로 다시 검사하는 이유가 무엇인가요?

함수가 실행될 때 값이 변조되거나 하는 일이 생기나요...?

또한,

여기서 @MainActivity 어노테이션을 쓰는 이유도 궁금합니다 ...!!

 

강의 너무 잘 듣고 있어요

(정가로 구매했는데 몇일전부터 할인해서 광광 우는중 ㅎㅎㅎ ㅠㅠㅠㅠ)

답변 1

0

Code With Joyce님의 프로필 이미지
Code With Joyce
지식공유자

안녕하세요, atg0614님!

질문해 주신 내용 "Permission Request Code 와 requestCode가 같은지 if문에서 확인하는 이유가 무엇인가요? " 에 대하여 답변드리겠습니다.

requestCode는 onRequestPermissionResult, onActivityResult 와 같이 다른 액티비티(를 비롯한 다양한 인텐트)를 확인하고 다시 돌아오는 경우에 쓰입니다.

그리고 액티비티에 하나만 구현하기 때문에 MainActivity A 에서 Activity B 로 갔다가 돌아오는지, Activity C로 갔다가 돌아오는지 확인하기 위함에 있습니다.

아래 예시처럼 requestCode를 사용하면 카메라를 갔다왔는지, 전화번호부에 갔다왔는지를 확인할 수가 있습니다! 퍼미션의 종류에도 여러가지가 있으니 각각 다른 requestCode를 준다면, requestCode에 따라 실행방법을 분리할 수도 있겠죠?


@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (resultCode == Activity.RESULT_CANCELED) {
            // code to handle cancelled state
        }
        else if (requestCode == CAMERA_REQUEST) {
            // code to handle data from CAMERA_REQUEST
        }
        else if (requestCode == CONTACT_VIEW) {
            // code to handle data from CONTACT_VIEW
        }
    }

답변이 도움이 되기를 바라겠습니다.

 

(추가로 할인 기간에 못 사셨다니 마음이 아픕니다 ㅜㅜ 완강하시고 code.with.joyce@gmail.com 으로 메일 하나 주세요 ^^)

atg0614님의 프로필 이미지
atg0614
질문자

선생님 정말 빠른 답변 너무 감사드립니다.

단번에 이해했습니다.

onRequestPermissionResult, onActivityResult

는 하나만 구현해놓고 RequestCode에 따라서 다른 기능을 하게 만들어주는군요..

감사합니다.

첫 강의를 이 것으로 시작해서 모르는 부분이 나올 때 마다 구글링 열심히 해가면서 배워가고 있습니다. 좋은 강의 감사드립니다.

 

혹시 질문의 마지막에 있던 this에 붙은 @MainActivity 어노테이션에 대한 답변도 가능할까요 ?

Code With Joyce님의 프로필 이미지
Code With Joyce
지식공유자

마지막 질문을 깜빡했네요 ^^

@MainActivity 와 같은 어노테이션을 붙여주는 이유는 바로 this가 위치해 있는 곳에 따라 참조하는 값이 달라질 수도 있기 때문입니다. let,apply,with 과 같은 람다식이나 오브젝트 안에서 this 는 그 자신을 가리킬 수 있습니다.

아래 예시를 보고 한 번 이해해 보세요.

class MainActivity {
    fun onCreate() {
        val list = listOf("사과", "배", "바나나")
        with (list) {
            println(this)              // >>> ["사과", "배", "바나나"]
            println(this@MainActivity) // >>> MainActivity@2a54aff7
        }
    }
}

 

atg0614님의 프로필 이미지
atg0614

작성한 질문수

질문하기