권한이 없는 것도 확인이 되고, 권한 요청을 시도해야하는 Cusom UI 까지 동작을 합니다. (권한이 없기때문에)그런데 권한요청팝업을 띄우는 코드가 동작하지 않습니다.
라는 질문을 받았습니다.
제 처음 답변은
"정말 코드가 정상적으로 동작하는 코드라는 확신이 있거나, 이전에 동작하는것에 문제가 없다면"
안드로이드 버전에 따른 이슈 등을 확인하여 변경된 사항을 체크해야 한다는 것을 알려주었습니다.
그러나, 쉽사리 해결하지 못하고 있었기에 직접 찾아보았습니다.
1. 앱에서 위치데이터를 수집하기 위해 아래와 같은 퍼미션을 추가하였다.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
2. 그러나 질문자는 이전처럼 위치권한을 수락해도, 백그라운드에서 데이터를 수집할 수 없다는 것을 알고 있다.
따라서, 아래와 같은 백그라운드에서도 수집할 수 있도록 퍼미션을 추가하였다.
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
3. 그 후, 권한 요청을 시도하였지만, 팝업창이 뜨질 않았다.
그로인해 질문을 하게 되었다..
왜 권한요청 팝업이 뜨지 않았을까?
공식문서에 의하면,
1. 위치권한을 요청한다.
2. 백그라운드 위치권한이 필요한 경우에는 필요한 순간에 추가적으로 요청한다.
를 권장하고 있습니다.
물론, 질문자도 여기까지는 이해하고 있었지만, "권장" 이라는 단어에 의하여 실 적용이 강제되지는 않는다고 생각하고 넘겼습니다.
하지만, 공식문서를 천천히 읽어본다면,
1. API29 부터는 백그라운드 위치 권한이 있어야만 모든 상황에서 현재 위치에 대한 데이터를 얻을 수 있다.
2. 그러나, 일부 기능에서만 백그라운드 위치 정보 권한이 필요할 수 있기 때문에, 포그라운드 위치 정보를 요청하고, 이후에 필요에 따라 백그라운드 위치정보 권한을 얻는 방식을 권장한다.
3. 그러나!! API30 부터는 권장사항을 완전히 적용하였기 때문에, 포그라운드의 위치권한과 백그라운드의 위치권한을 동시에 요청한다면, 어떠한 동작도 하지 않는다고 안내하고 있다.
4. 따라서 권한요청 팝업을 띄울때, 두 경우를 동시에 체크하고, 동시에 요청하는 방식으로 코드를 작성한다면, API 30부터는 동작하지 않는다.
- 권장사항대로 작성하는 것이 가장 좋겠지만, API30 미만 (API29까지) 처럼 한 화면에서 모든 권한을 다 체크하고 진행하고 싶다면,
A. 백그라운드 위치권한을 제외한 나머지 권한을 체크한다. (포그라운드 위치권한 포함)
B. 모든 권한이 허용된다면, 백그라운드 위치권한을 체크하고 요청한다.
의 순서로 진행하면 될 것 같다.
만약,
requestPermissions(permissionRequestArray, REQUEST_CODE ...
처럼 동시에 없는 권한을 요청하는 코드로 API30 이후의 기기까지 호환시키려는 경우라면, 4번처럼 하는 것이 의도대로 동작할 수 있을 것 같다.
'BackUp (관리중지) > Android Q&A' 카테고리의 다른 글
[Android] ScrollView inner WebView 스크롤 (0) | 2021.07.27 |
---|---|
[Android] SafetyNonce 에는 무엇을 작성해야 하나요? (0) | 2021.06.08 |
Fragment 를 사용하는데, 앱이 점점 느려져요. (0) | 2021.04.21 |