위치 정보 액세스 권한 요청

사용자 개인 정보를 보호하려면 위치 서비스를 사용하는 앱에서 위치 정보 액세스 권한을 요청해야 합니다.

위치와 관련된 여러 권한이 있습니다. 어떤 권한을 어떻게 요청하는지는 앱 사용 사례의 위치 요구사항에 따라 다릅니다.

이 페이지에서는 다양한 위치 요구사항 유형을 설명하고 각 사례에서 위치 정보 액세스 권한을 요청하는 방법을 설명합니다.

위치 정보 액세스 권한을 요청하려면 모든 런타임 권한에 관한 권장사항을 따르세요.

위치 정보 액세스 권한 유형

각 권한에는 다음과 같은 특징이 있습니다.

포그라운드 위치

앱에 위치 정보를 한 번만 또는 정의된 시간 동안 공유하거나 수신하는 기능이 포함되어 있으면 이 기능에는 포그라운드 위치 정보 액세스 권한이 필요합니다. 몇 가지 예는 다음과 같습니다.

  • 내비게이션 앱에서 사용자가 세부 경로 안내를 받을 수 있는 기능
  • 메시지 앱에서 사용자가 현재 위치를 다른 사용자와 공유할 수 있는 기능

앱의 기능이 다음 상황 중 하나에서 기기의 현재 위치에 액세스한다면 시스템은 앱에서 포그라운드 위치를 사용하고 있다고 간주합니다.

  • 앱에 속한 활동이 표시됩니다.
  • 앱에서 포그라운드 서비스를 실행하고 있습니다. 포그라운드 서비스를 실행하고 있을 때 시스템은 지속적으로 알림을 표시하여 사용자 인지도를 높입니다. 앱은 사용자가 기기의 버튼을 누르거나 기기 화면을 끌 때와 같이 백그라운드에 배치되면 액세스 권한을 유지합니다.

    또한 다음 코드 스니펫과 같이 location포그라운드 서비스 유형을 선언해야 합니다. Android 10 (API 수준 29) 이상에서는 이 포그라운드 서비스 유형을 선언해야 합니다.

    <!-- Recommended for Android 9 (API level 28) and lower. -->
    <!-- Required for Android 10 (API level 29) and higher. -->
    <service
        android:name="MyNavigationService"
        android:foregroundServiceType="location" ... >
        <!-- Any inner elements would go here. -->
    </service>
    

다음 스니펫과 같이 앱에서 ACCESS_COARSE_LOCATION 권한이나 ACCESS_FINE_LOCATION 권한을 요청하면 포그라운드 위치의 필요성을 선언합니다.

<manifest ... >
  <!-- Always include this permission -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  <!-- Include only if your app benefits from precise location access. -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

백그라운드 위치

앱의 기능이 지속적으로 다른 사용자와 위치를 공유하거나 Geofencing API를 사용하는 경우 앱에는 백그라운드 위치 정보 액세스 권한이 필요합니다. 몇 가지 예는 다음과 같습니다.

  • 가족 위치 공유 앱에서 사용자가 가족 구성원과 지속적으로 위치를 공유할 수 있는 기능
  • IoT 앱에서 사용자가 집을 나갈 때 꺼지고 집에 돌아올 때 다시 켜지도록 홈 기기를 구성할 수 있는 기능

앱이 포그라운드 위치 섹션에서 설명된 상황 이외의 모든 상황에서 기기의 현재 위치에 액세스한다면 시스템은 앱에서 백그라운드 위치를 사용하고 있다고 간주합니다. 백그라운드 위치 정밀도는 앱에서 선언한 위치 정보 액세스 권한에 따라 달라지는 포그라운드 위치 정밀도와 동일합니다.

Android 10 (API 수준 29) 이상에서 개발자는 런타임 시 백그라운드 위치 정보 액세스 권한을 요청하기 위해 앱 매니페스트에서 ACCESS_BACKGROUND_LOCATION 권한을 선언해야 합니다. 이전 버전의 Android에서는 앱이 포그라운드 위치 정보 액세스 권한을 수신하면 자동으로 백그라운드 위치 정보 액세스 권한도 수신합니다.

<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

정확성

Android는 다음과 같은 수준의 위치 정확성을 지원합니다.

대략적인 위치
기기 위치 추정치를 제공합니다. LocationManagerService 또는 FusedLocationProvider에서 가져온 경우 이 위치 추정치의 오차 범위는 약 3제곱킬로미터 이내입니다. ACCESS_COARSE_LOCATION 권한을 선언하고 ACCESS_FINE_LOCATION 권한은 선언하지 않으면 앱이 이 수준의 정확도로 위치를 수신할 수 있습니다.
정확한 위치
최대한 정확한 기기 위치 추정치를 제공합니다. LocationManagerService 또는 FusedLocationProvider에서 가져온 경우 이 위치 추정치의 오차 범위는 일반적으로 약 50미터 이내이며 몇 미터 이내 또는 그 이상으로 정확할 때도 있습니다. ACCESS_FINE_LOCATION 권한을 선언하면 앱이 이 수준의 정확도로 위치를 수신할 수 있습니다.

사용자가 대략적인 위치 정보 액세스 권한을 부여하면 앱이 선언하는 위치 정보 액세스 권한과 관계없이 대략적인 위치에만 액세스할 수 있습니다.

사용자가 대략적인 위치 정보 액세스 권한만 부여해도 앱이 계속 작동해야 합니다. 앱의 기능에서 ACCESS_FINE_LOCATION 권한을 사용하여 정확한 위치 액세스를 확실하게 요청하는 경우 사용자에게 앱이 정확한 위치에 액세스하는 것을 허용하도록 요청할 수 있습니다.

백그라운드 위치 액세스 허용에 관한 알림

Android 10 (API 수준 29) 이상에서는 사용자가 백그라운드 위치 정보 액세스 권한을 부여한 후 앱의 기능이 백그라운드에서 기기 위치에 처음 액세스하면 시스템이 사용자에게 전송할 알림을 예약합니다. 이 알림은 사용자에게 앱이 기기 위치에 항상 액세스하도록 허용했음을 알립니다. 알림 예는 그림 8에 표시됩니다.

앱의 SDK 종속 항목에서 위치 요구사항 확인

앱에서 위치 정보 액세스 권한, 특히 ACCESS_FINE_LOCATION 권한에 종속된 SDK를 사용하는지 확인합니다. 자세한 내용은 Medium의 SDK 종속 항목 동작 알아보기 블로그 게시물을 참고하세요.

추가 리소스

Android의 위치 정보 액세스 권한에 관한 자세한 내용은 다음 자료를 참고하세요.

Codelab

동영상

샘플

  • 샘플 앱: 위치 정보 액세스 권한 사용 방법을 보여줍니다.