사용자의 개인 정보를 보호하려면 앱 개발자는 대략적인 위치 정보 액세스 권한만 요청하는 것이 좋습니다. 대략적인 위치가 필요한 앱은 일반적으로 융합 네트워크 위치 (FLP)를 사용합니다. 빠르고 전력 사용이 적기 때문입니다. Android 기반 휴대기기와 비교할 때 자동차 앱의 네트워크 위치는 사용하기 더 어려울 수 있습니다. 다음 두 가지 Android API를 사용할 수 있습니다.
LocationManager API에서는
requestLocationUpdates를 사용하여 선호하는 위치 정보 제공자를 명시적으로 식별해야 합니다.Google Play 서비스 API를 사용하면
FusedLocationProviderClient에서 위치를 더 간단하게 사용할 수 있습니다.
많은 자동차 앱이 LocationManager 대신 Google Play 서비스 API의 FLP를 사용합니다. FLP는 차량에 필요한 위치 요청 기준과 정책 (전력, 정확도)에 기반하여 최적의 위치 정보 제공자를 선택합니다.
대신 android.permission.ACCESS_FINE_LOCATION 권한을 사용하는 상세한 위치용 GPS_PROVIDER뿐 아니라 NETWORK_PROVIDER를 명시적으로 요청하고 사용하도록 선택할 수 있습니다. Android 12 (API 수준 31) 이상에서는 이전에 Google Play 서비스 API를 통해서만 액세스할 수 있던 FUSED_PROVIDER를 LocationManager에서 위치 정보 제공자로 사용할 수 있습니다. FusedLocationProvider.java에서 FLP 구현을 확인할 수 있습니다.
대략적인 위치 권한만으로도 GPS_PROVIDER를 사용할 수 있지만 프레임워크에서는 기대치에 맞추기 위해 인위적으로 정확도 수준을 떨어뜨립니다. 이는 전체적인 가용성이 낮고 대략적인 위치를 얻는 시간이 더 느린 경우가 많아 Android 휴대전화를 타겟팅하는 개발자에게는 의미가 없습니다.
자동차의 네트워크 위치
Android 휴대전화 (Google 모바일 서비스 포함)에 사용되는 NETWORK_PROVIDER는 근처 휴대폰 기지국, Wi-Fi 액세스 포인트, 블루투스 (BT) 비콘을 기반으로 위치를 결정합니다. 따라서 NETWORK_PROVIDER를 사용하려면 데이터 연결이 필요할 수 있습니다.
자동차 앱의 경우 기기마다 제약이 다릅니다. 글로벌 항법 위성 시스템 (GNSS)은 보통 켜져 있으므로 전력과 배터리 사용량 증가로 인한 불이익은 발생하지 않습니다. 따라서 IVI 가동시간이 영향을 받지 않습니다. Google에서는 서버와 교환되는 데이터를 최소화하려고 노력합니다.
많은 앱이 LocationManager 대신 Play API의 FLP를 사용합니다. FLP는 전력 및 정확도와 같은 요청의 기준이나 정책을 충족하는 최적의 위치 정보 제공자를 자동으로 선택하기 때문입니다.
휴대기기와 달리 차량은 한 위치에서 다른 위치로 이동하는 경우가 드뭅니다. 차량 위치는 대부분 내부적으로 알려져 있습니다.
네트워크 위치 정보 제공자 (NLP)
대다수 차량은 셀 ID(및 신호 강도)에 관한 필요한 정보를 가져오기 위해 필수 전화 통신 API를 구현하지 않습니다. 또한 Google에서는 데이터 사용량을 최소화하므로 NLP의 추가 기능 구현이 제공되지 않습니다.
통합 위치 정보 제공자
모바일 FLP는 네트워크 제공자와 GPS 제공자를 사용하는 것 외에도 다른 센서의 정보를 통합하여 위치 정보의 품질을 높입니다. 반대로 Automotive FLP는 GPS_PROVIDER를 기본 소스로 사용합니다. 클라이언트가 대략적인 위치를 요청할 때 정확도를 저하시키기 위해 의도적인 오류를 추가하여 GNSS 위치를 조정합니다.
따라서 극히 일부의 경우 첫 번째 위치가 제공되는 시간이 평소보다 길어질 수 있습니다. 예를 들어 차량 또는 더 정확하게는 차량의 위치 하위 시스템이 처음 사용되거나 견인된 후입니다.
모바일 및 자동차 용도를 타겟팅하는 앱 설계
높은 품질의 정밀도가 필요하지 않은 모바일 및 자동차 기기를 타겟팅하는 앱은 android.permission.ACCESS_COARSE_LOCATION 만 요청하고 가능하면 FLP를 사용하는 것으로 대체합니다. 또는 동일한 권한으로 GPS_PROVIDER를 직접 사용하세요. 프레임워크에서 기본 GNSS 위치의 정밀도를 떨어뜨려 API 기대치와 맞춥니다. 자세한 내용은 위치 정보 액세스 권한 요청의 정확도를 참고하세요.
또한 이러한 앱은 매니페스트에서 android.hardware.location.network 기능을 선택사항으로 명시적으로 선언해야 합니다. 예를 들면 다음과 같습니다.
<uses-feature android:name="android.hardware.location.network" android:required="false" />
이 접근 방식을 통해 다양한 폼 팩터의 기기와의 호환성을 높일 수 있으므로 필요 시 위치를 얻을 때 코드 차이 없이 앱을 최대로 사용할 수 있습니다.