실제 시나리오에 맞게 위치 사용 최적화

이 섹션에서는 일반적인 위치 수집 시나리오를 설명하고 Geofencing 및 Fused Location Provider API를 최적으로 사용하는 방법을 추천합니다.

사용자에게 표시되는 업데이트 또는 포그라운드 업데이트

예: 지연 시간이 매우 적으면서 자주 정확하게 업데이트를 해야 하는 매핑 앱. 모든 업데이트가 포그라운드에서 발생합니다. 사용자가 활동을 시작하면 위치 데이터가 사용되고 잠시 후 활동이 중지됩니다.

PRIORITY_HIGH_ACCURACY 또는 PRIORITY_BALANCED_POWER_ACCURACY 값이 있는 setPriority() 메서드를 사용합니다.

setInterval() 메서드에 지정되는 간격은 사용 사례에 따라 달라집니다. 실시간 시나리오의 경우, 이 값은 몇 초로 설정하고 그 외에 나머지 경우에는 몇 분으로 설정합니다 (배터리 사용량을 최소화하려면 약 2분 이상으로 설정하는 것이 좋습니다).

기기의 위치 확인

예: 날씨 앱이 기기의 위치를 알고자 합니다.

getLastLocation() 메서드를 사용하면 가장 최근에 수집한 위치 정보를 반환합니다 (매우 드물게 null이 될 수도 있습니다). 이 메서드는 간단하게 위치 정보를 얻는 수단을 제공하고 적극적으로 위치 업데이트를 요청하는 것과 관련된 비용이 발생하지 않습니다. isLocationAvailable() 메서드와 함께 사용합니다. getLastLocation()이 반환한 위치가 적절히 최신 상태이면 true를 반환합니다.

사용자가 특정 위치에 있을 때 업데이트 시작

예: 사용자가 직장, 집 또는 다른 위치에서 특정 거리 내에 있을 때 업데이트를 요청합니다.

통합 위치 정보 제공자 업데이트와 함께 지오펜싱을 사용합니다. 앱이 지오펜스 진입 트리거를 수신하면 업데이트를 요청하고 앱이 지오펜스 퇴장 트리거를 수신하면 업데이트를 삭제합니다. 이렇게 하면 사용자가 지정된 영역에 들어갈 때만 앱이 더욱 자세한 위치 업데이트를 받을 수 있습니다.

이 시나리오의 일반적인 워크플로는 지오펜싱 진입 시 알림을 띄우고, 사용자가 알림을 탭할 때 업데이트를 요청하는 코드가 포함된 활동을 실행하는 것입니다.

사용자 활동 상태에 따라 업데이트 시작

예: 사용자가 운전 중이거나 자전거를 타고 있을 때만 업데이트를 요청합니다.

통합 위치 정보 제공자 업데이트와 함께 Activity Recognition API를 사용합니다. 타겟팅된 활동이 감지될 때 업데이트를 요청하고 사용자가 활동의 실행을 중지할 때 업데이트를 삭제합니다.

이 사용 사례의 일반적인 워크플로는 감지된 활동의 알림을 표시하고 사용자가 알림을 탭할 때 업데이트를 요청하는 코드가 포함된 활동을 실행하는 것입니다.

지역과 연결된 장기 실행 백그라운드 위치 업데이트

예: 기기가 소매업체 근처에 들어갔을 때 사용자가 알림을 받기를 원합니다.

이는 지오펜싱의 모범적인 사용 사례입니다. 이 사용 사례는 백그라운드 위치를 사용하는 것이 거의 확실하므로 addGeofences(GeofencingRequest, PendingIntent) 메서드를 사용합니다.

다음과 같은 구성 옵션을 설정해야 합니다.

  • 거주지 변경을 추적하고 있다면 setLoiteringDelay() 메서드를 사용하여 약 5분 이하의 값을 전달합니다.

  • setNotificationResponsiveness()를 사용하여 약 5분에 상응하는 값을 전달합니다. 그러나 앱의 응답이 더 지연되어도 괜찮다면 약 10분에 해당하는 값을 사용해도 됩니다.

앱은 한 번에 최대 100개의 지오펜싱만 등록할 수 있습니다. 앱에서 많은 소매업체 옵션을 추적하려는 사용 사례에서는 앱이 넓은 지오펜싱 (도시 수준)을 등록하고 넓은 지오펜싱 안에 있는 매장에는 좁은 범위의 지오펜싱 (도시 내 위치)을 동적으로 등록하는 것이 좋습니다. 사용자가 넓은 지오펜스에 들어가면 좁은 범위의 지오펜스를 추가합니다. 사용자가 넓은 지오펜스에서 나오면 좁은 범위의 지오펜스를 삭제하고 새로운 지역의 지오펜스를 다시 등록합니다.

가시적 앱 구성요소가 없는 장기 실행 백그라운드 위치 업데이트

예: 위치를 수동적으로 추적하는 앱

가능하면 배터리 소모가 거의 발생하지 않는 PRIORITY_NO_POWER 옵션이 있는 setPriority() 메서드를 사용하세요. PRIORITY_NO_POWER를 사용할 수 없다면 PRIORITY_BALANCED_POWER_ACCURACYPRIORITY_LOW_POWER를 사용하되 지속적인 백그라운드 작업에는 PRIORITY_HIGH_ACCURACY를 사용하지 마세요. 이 옵션의 배터리 소모가 상당하기 때문입니다.

더 많은 위치 데이터가 필요한 경우 setFastestInterval() 메서드를 호출하여 setInterval()에 전달했던 것보다 작은 값을 전달하면 수동적으로 위치 정보를 수집할 수 있습니다. 수동적 위치 정보 수집은 PRIORITY_NO_POWER 옵션과 결합하면 다른 앱에서 연산한 위치 정보를 추가 비용 없이 기회가 있을 때마다 제공받을 수 있습니다.

setMaxWaitTime() 메서드를 사용하여 지연 시간을 추가하는 방법으로 빈도를 조절합니다. 예를 들어 setinterval() 메서드에 약 10분으로 값을 설정한다면 30~60분으로 값을 설정한 setMaxWaitTime()을 호출하는 것이 좋습니다. 이 옵션을 사용하면 앱에 위치 정보가 약 10분마다 연산되지만, 앱이 30~60분마다 활성화되어서 일부 위치 데이터를 일괄 업데이트로 제공합니다. 이 방법은 지연 시간을 적용하는 대신 더 많은 데이터를 제공하고 배터리 성능을 향상합니다.

사용자가 다른 앱과 상호작용하는 동안 높은 정확성으로 자주 업데이트

예: 사용자가 화면을 끄거나 다른 앱을 열 때도 계속 작동하는 내비게이션 또는 피트니스 앱

포그라운드 서비스를 사용합니다. 앱에서 사용자 대신 리소스가 많이 소모되는 작업을 실행할 가능성이 있는 경우, 사용자에게 작업이 권장사항이라는 것을 알립니다. 포그라운드 서비스는 지속적인 알림이 필요합니다. 자세한 내용은 알림 개요를 참고하세요.