https://developer.android.com/develop/sensors-and-location/location/permissions/runtime

 

런타임 시 위치 정보 액세스 권한 요청  |  Sensors and location  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 런타임 시 위치 정보 액세스 권한 요청 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱의 기능에 위

developer.android.com

 

위치 권한이 필요할 때 사용자의 응답을 기다리기.

화면에 위치 공유 버튼 보여주기 -> 버튼 클릭 시 권한 요청 -> 권한 허용 후 위치 공유 프로세스 이어나가기

 

사용자는 대략적 위치만 허용할 수도 있다.

ACCESS_FINE_LOCATION 보다는 ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION 두 권한을 추가 후 둘 중 하나만 허용하더라도 동작하도록 설계 권장
안드로이드 12 이전에는 ACCESS_FINE_LOCATION 하나만 요청 가능하지만 12 이후는 반드시 둘다 요청해야 함.

# 안드로이드 12 이후 오류 메세지
ACCESS_FINE_LOCATION must be requested with ACCESS_COARSE_LOCATION.

사용자의 개인정보 보호를 위해 가능하면 ACCESS_COARSE_LOCATION 만 사용하는 것 권장.

ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION 둘 다 요청 시 다이얼로그에 사용자가 선택하게 나옴.

타겟 버전과 상관없이 안드로이드 12 이상에서는 위 선택 다이얼로그가 뜬다. 11버전에서 설치 후 12버전으로 올리면 선택 다이얼로그가 다시 나온다.

권한을 회수하면 프로그램이 다시 실행되므로 모범 사례를 잘 이해하고 구현할 것.

 

사용자 권한 선택 시

Precise 선택 시 ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION 부여
Approximate 선택 시 ACCESS_COARSE_LOCATION
Deny 선택 시 권한 부여 없음.

아래 코드로 어떤 권한을 부여 했는지 파악 하기

@RequiresApi(Build.VERSION_CODES.N)
fun requestPermissions() {
    val locationPermissionRequest = registerForActivityResult(
        ActivityResultContracts.RequestMultiplePermissions()
    ) { permissions ->
        when {
            permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
                // Precise location access granted.
            }
            permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
                // Only approximate location access granted.
            }
            else -> {
                // No location access granted.
            }
        }
    }

    // Before you perform the actual permission request, check whether your app
    // already has the permissions, and whether your app needs to show a permission
    // rationale dialog. For more details, see Request permissions:
    // https://developer.android.com/training/permissions/requesting#request-permission
    locationPermissionRequest.launch(
        arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        )
    )
}

 

정확도 높은 권한으로 업그레이드 요청

대략적 위치 권한에서 상세 위치 권한으로 요청을 추가 할 수 있다. 반드시 이 권한이 필요 한지는 다시 한번 고려하기.

1. 권한 요청 전, 왜 권한을 필요로 하는지 설명하기
2. ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION 를 함께 요청하기. 이미 ACCESS_COARSE_LOCATION 는 허용 했다면 허용한 옵션(한번만 or 앱 사용중)
에 따라 다이얼로그가 다르게 표시됨.

 

 

포그라운드 위치요청 먼저 하기

앱에서는 여러 위치 기능을 필요로 할 수 있지만, 백그라운드 위치 요청은 주로 사용을 하지 않으므로, 권한 요청은 필요 시 점진적으로 추가 권장.
사용자도 언제 기능을 필요로 하는지 인지 할 수 있어 투명성 보장. 안드로이드 11 이상부터는 강제 적용 필요. 포그라운드 백그라운드 동시 요청 시 시스템에서 무시.

예) 지도 화면에 내 위치 버튼(포그라운드)과, 내 위치 주변 추천 알림(백그라운드)

 

'Android > 위치' 카테고리의 다른 글

3. 백그라운드 위치  (0) 2025.05.28
1. 위치 기능 소개  (0) 2025.05.27

+ Recent posts