Domain/Android

[Android] BLE와 Location Permission

by Donghwan 2021. 4. 23.

애플리케이션에서 블루투스 기능을 사용하려면 두 개의 권한을 선언해야 합니다. 그중 첫 번째는 Bluetooth 입니다. 이 권한은 연결 요청, 연결 수락 및 데이터 전송과 같은 블루투스 통신을 수행하는 데 필요합니다.

두 번째로 선언해야 하는 권한은 ACCESS_FINE_LOCATION입니다. 앱에 이 권한이 필요한 이유는 블루투스 스캔을 사용하여 사용자 위치에 대한 정보를 수집할 수 있기 때문입니다. 이 정보는 사용자 본인의 기기에서 가져올 수도 있고, 상점 및 교통 시설과 같은 위치에서 사용 중인 블루투스 비콘에서 가져올 수도 있습니다.

앱이 Android 9(API 레벨 28) 이하를 대상으로 하는 경우 ACCESS_FINE_LOCATION 권한 대신 ACCESS_COARSE_LOCATION 권한을 선언할 수 있습니다.

  • ACCESS_FINE_LOCATION : GPS, 네트워크를 사용해 위치 정보 확인
  • ACCESS_COARSE_LOCATION : 네트워크만 사용해 위치 정보 확인

포그라운드 위치

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

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

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

  • 앱에 속한 활동이 표시됩니다.
  • 앱에서 포그라운드 서비스를 실행하고 있습니다. 포그라운드 서비스를 실행하고 있을 때 시스템은 지속적으로 알림을 표시하여 사용자 인지도를 높입니다. 앱은 사용자가 기기의 버튼을 누르거나 기기 화면을 끌 때와 같이 백그라운드에 배치되면 액세스 권한을 유지합니다.
      <!-- 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>
  • 또한 다음 코드 스니펫과 같이 location포그라운드 서비스 유형을 선언하는 것이 좋습니다. Android 10(API 수준 29) 이상에서는 이 포그라운드 서비스 유형을 선언해야 합니다.

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

<manifest ... >
  <!-- To request foreground location access, declare one of these permissions. -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

정밀도 수준은 요청하는 권한에 따라 다릅니다.

ACCESS_COARSE_LOCATION도시 블록 내에 위치 정확성을 제공합니다. ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION을 요청할 때 제공되는 위치보다 더 정확한 위치를 제공합니다. 이 권한은 저전력 블루투스(BLE)를 통해 근처 기기에 연결과 같은 일부 연결 작업에 필요합니다.

백그라운드 위치

앱 내 기능이 지속적으로 다른 사용자와 위치를 공유하거나 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 Developer ]

728x90
반응형

댓글