돌아오신것을 환영합니다 이 영상에서는
Permission Request(권한 요청)을 이어 가 보겠습니다
이것은 여러분이 앞으로 할 모든 권한 요청에 중요합니다
위치 권한 뿐만이 아니라 요청하고 싶은 그 어떤 권한에 적용
가능합니다
좋습니다
지금같은 경우 우리는 특정 위치에 대한 권한을 요청 해 보겠습니다
우선 그것이 왜 필요한지 rationalize(합리화) 해야 합니다 그러니까
권한이 필요한지 아닌지를 판단하는것이 필요합니다
우리가 세팅 해야되는것 중 rationaleRequired(근거필요) 라는 것이 있습니다
ActivityCompat 과 shouldShowRequestPermissionRationale을 사용합니다
이것이 우리가 사용할 메소드 입니다
이것은 기본적으로 이 위치가 왜 필요한지에 대한 이유를 표시합니다
왜 이 권한이 필요한지 사용자에게 알려줘야 합니다
이 shouldShowRequestPermissionRationale에 콘텍스트를 패스 해야 합니다
맞아요
액티비티와 권한 non null
저쪽에 있어야 합니다
그러니 context(콘텍스트)를 MainActivity로 줍니다 왜냐하면 메인액티비티 안에서 콘텍스트를
패스할것이기 때문입니다
또는 우리가 메인액티비티 안에 있기 때문에 그것의 컨텍스트인 겸 입니다
다시 말하면 이 permission rationale(권한근거)를 다른 창에서 열지 말라는 것 입니다
메인액티비티의 스크린에서 열라는 것 입니다
그리고 여기 안에는 권한 자체가 무엇인지 씁니다
Manifest.permission.
ACCESS_FINE_LOCATION
이것이 저희가 확인할 것 이죠
그리고
저는 두가지 다 확인하고 싶습니다
그러면 fine location이나 coarse location 중 어떤 것에 대한 권한 근거가 필요하까요?
Coarse location 입니다
이렇게
보시다싶이 여기서 굳이 main activity를 추가할 필요는 없습니다 왜냐하면 그 위에
컨텍스트를 쓰고 있기 때문입니다
여기에서는 shouldshow rationale 안에서 as MainActivity가 있는것을 확인합니다
하지만 이런식으로 두셔도 됩니다
좋습니다
그 안에서 일어나는 일은 없지만 기본적으로 같은 것 입니다
이제 rationaleRequired를 얻습니다
이것은
이것은 permission rationale(권한근거)을 표시해야 하는지에 대한 정보만 보유합니다
그러니까 우리가 권한을 받고 싶은지 아닌지에 대한 이유입니다
사용자에게 권한이 필요한 이유를 알려야 하는 경우
합당한 이유를 줘야 합니다
그럼
저는 여기에서 toast(토스트)를 쓰겠습니다
Toast.makeText
이것은 context가 필요합니다
그러니 context를 패스 하고 말하고자 하는 텍스트도 씁니다
“이 기능을 사용하시려면 위치 권한이 필요합니다“
여기서 기능을 사용하기 위한 적절한 이유를 얘기합니다
사용자가 위치와 관련된 일을 하고싶다면 이것을 여기에 패스하면 됩니다
그리고
이 텍스트는 toast.LENGTH_LONG).show 가 필요합니다
좋아요
여기서 일어나는 일은
새로운 줄에 놓습니다
이제 우리는 토스트를 가지고 있습니다 토스트가 무엇인지 본 적 있으시죠
화면 밑에 표시되는 작은 팝업입니다
텍스트를 표시하는 아주 작은 표시기 입니다
그리고 context를 패스해야합니다 이 context를 location display 컴포저블 쪽으로
Create function에 있는 매인 엑티비티에서부터 가지고 옵니다
그것은 나중에 보여드리겠습니다
그런 다음 무엇을 표시하고 싶은지 얼마나 오랫동안 표시할지
얘기합니다
그러니 왜 액세스가 필요한지 표시할것이면 그냥 이것을 표시하면 됩니다
당연히 이걸 표시하는 다른 방법을 찾을수도 있겠지만 지금은 괜찮습니다
여기에 어떤것을 표시해야 하냐면
만약 rationale(근거)가 필요하지 않다면
그러니까 이게 False라면 앱에서 직접 설정을
변경할 수 없는 상황이 됩니다
사용자의 설정이나 안드로이드 폰 설정으로 들어가야 합니다
그런경우에는 설정으로 들어가서 바꾸라는 토스트를 만들겠습니다
여러분도 경험해보신 적 있으실 것 입니다 어플리케이션 안에서 접근이 거부가 돼서
그러니까 앱 자체에서 권한 요청을 할 수 없을때
안드로이드 핸드폰 설정 안에 들어가서 바꿔야 하는것 입니다
그런것을 만들어 볼 것 입니다
이런경우엔 else를 사용합니다 지금은 “이 기능을 사용하려면 위치권한 이 필요합니다”
라고 되어있는데
“안드로이드 설정에서 활성화 해주세요” 같은 말로 바꿀 수 있습니다
좋아요
ㅤ
이제 이것을 테스트 해볼 수 있을것 같습니다
이 전체가 우리의 권한 요청 런처 입니다
이 요청 런처를 여기 우리가 위치 권한을 요청할 곳 안에서 사용 해봅시다
실제로 런치를 하기 위해서 request permission launcher 을 사용할 것 입니다
그리고 확인하고자 하는 다양한 권한의 array(배열)을 패스 해야 합니다
그러니 여기 안에 arrayof 라고 하고
그리고 Manifest permission 을 사용할 것 인데
여기 위에서 카피해서 오겠습니다
여기 있는 이 부분을 카피하겠습니다
Coarse location과 fine location 둘 다 필요합니다
저는 fine location부터 할 것이지만 순서는 중요하지 않습니다
그러니 이 두가지 permission(권한)의 array(배열)이 제가 런치하고 싶은 것 입니다
저희가 이전에 권한런처를 세팅 해 놓았습니다 이것은 rememberLauncerForActivityResult입니다
이것은 contract가 필요하고 이것도 저희가 해 놓았습니다
이것이 기본적인 디폴트 모습입니다
이것은 여러분이 수정하여 사용할수 있는것이 아닙니다
항상 이 같은 모습일 것 입니다
여기서 바꿀만한 것은 그때 그때 체크하고싶은 permission 입니다
예를들어 여기에 여러가지 permission이 있을 수 있습니다
지금 같은 경우엔 두가지 입니다
하지만 여러분의 어플리케이션 일곱가지 permission이 될 수 도 있습니다
기본적으로 여기에서 permission을 요청하는것과 동일한 접근 방식을
사용하게 됩니다
그리고 여기에서 실제로 permission 요청을 런칭합니다
그러니 여기서 requestPermissionLauncher을 사용하는것 입니다
이 requestPermissionLauncher로 여기 이 모든것을 설정 했습니다
그리고 여기가 실제로 이 Permission Launcher을 실행하려는 곳 입니다
이 같은 경우엔 fine location과 coarse location 입니다
좋아요
이것을 display 하려면 이 안에서 보여줘야 합니다
혹은 여기에 location display(위치 표시)를 call(호출) 합니다
여기에서 MyApp이라는 컴포저블을 만들겠습니다
이것은 예를들면 부모 컴포저블 입니다
이 MyApp은 context가 필요합니다 그것을 LocalContext.current 입니다
LocalContext를 import 하겠습니다
지금 내가 있는 액티비티의 context를 달라는 것 인데
여기 위에 있는것이 그 일을 하는 것입니다
그리고 locationUtils를 세팅하고 그 것은 locationUtils와 방금 세팅한
Context입니다
그런 다음 locatoinDisplay를 표시할 수 있고 거기에 패스할 수 있는 locationUtils와 context
가 있습니다
이제 표면 내부에서 myApp을 사용할 수 있습니다
이제 어플리케이션을 실행 해 봅시다
로딩하는동안 여기서 했던것을 다시 한번 빠르게 살펴보겠습니다
좋아요
여기에 저한테 필요없는 permission이 있어서
그것은 없애겠습니다
어떻게 자동으로 생성된 permission이 있어서 이로인해 약간의
문제가 있었습니다
좋아요
어플리케이션이 로드 되었습니다 “위치를 사용할 수 없음” 이라고 나옵니다
“위치 확인”
좋아요
여기에 위치표시를 표시하는 부모 컴포저블을 설정했는데
우리의 위치표시는 권한요청을 하기 위해서 location utils와
Context가 필요합니다
그러니 그것을 세팅 하겠습니다
LocalContext, 곧 current context 인것을 설정 했습니다
여기 보시면 안드로이드 어플리케이션에서 사용할 수 있는 context를 제공합니다 라고 나와있습니다
그리고 우리는 locationUtils에 context를 패스해서 locationUtils를 얻고있습니다
여기 보시면 context를 패스 해야 합니다
Permission이 있는지 없는지 확인을 위하여
필요했던 것 입니다
그런 다음 여기에 myApp을 로드 하면
위치 컴포저블을
Display 합니다
여기 어플리케이션이 있습니다
위치를 찾아봅시다
위치사용 권한을 물어보는 팝업이 보입니다
그러면 앱 사용중에만, 이번 한번만, 그리고 허용 안함이 있습니다 그리고 정밀와 근사치도 있습니다
한번에 두가지 권한을 요청하는 것 입니다
이 ‘근사치’는 coarse location 이고
이 ‘정밀’은 fine location 입니다
또 선택 가능한것은 ‘앱 사용중에만 허용‘
‘한번만 허용’ 혹은 ‘허용 안함’ 이 있습니다
우선 ‘앱 사용중에만 허용’을 선택합니다 이제 위치에 대한 액세스는 있지만 아직 위치가 보여지지는
않습니다
그러니 저희 핸드폰에 있는 설정에 가보겠습니다
그것은 다음 영상에서 보여드리도록 하겠습니다
좋습니다
이 영상은 이미 많이 긴 것 같네요
다음 영상에선 실제 설정안에서 어떻게 세팅이 되었는지 보겠습니다
거기서 뵈요