Wear OS에서 위치 감지

한눈에 파악이 가능한 시계의 작은 폼 팩터 덕분에 Wear OS는 사용자 위치를 기록하고 보고하고 응답하는 앱에 가장 적합한 플랫폼입니다. 예를 들어, 사용자에게 거리, 속도, 방향에 관한 실시간 업데이트를 제공하는 앱을 빌드하거나 사용자의 주변 환경을 한눈에 파악할 수 있는 신호를 제공하는 앱을 빌드할 수 있습니다.

자세한 내용은 위치 인식 앱 빌드를 참고하세요.

일부 시계에는 연결된 휴대전화가 없어도 위치 데이터를 검색하는 GPS 센서가 내장되어 있습니다. 시계 앱에서 위치 데이터를 요청하면 시스템은 가장 전력 효율이 높은 방법으로 휴대전화나 시계에서 위치를 가져옵니다. 따라서 시계에 GPS 센서가 없어도 위치 정보를 계속 가져올 수 있습니다.

위치 데이터 획득이 배터리 수명에 미치는 영향을 줄이려면 PRIORITY_BALANCED_POWER_ACCURACY 값을 사용하여 setPriority()를 호출합니다. 우선순위 설정이 다르면 칩을 다르게 최적화할 수 있습니다.

가능하면 setInterval()을 사용하여 분당 1회 이하로 위치를 요청하여 배터리를 절약하세요.

다음 섹션에 설명된 것처럼 앱은 센서가 없는 시계가 휴대전화와 연결 해제될 때 위치 데이터 손실을 처리해야 합니다.

방법 선택

Wear OS 앱에 위치 데이터를 제공하는 방법에는 두 가지가 있습니다. 통합 위치 정보 제공자(FLP) 또는 Wear 건강 관리 서비스(WHS)를 사용할 수 있습니다. FLP는 Google Play 서비스 API입니다.

다음과 같은 상황에서 FLP를 사용하세요.

  • 지속적이 아닌 한순간의 위치 데이터가 필요합니다(예: 주차된 자동차의 위치 표시).
  • 지속적으로 위치가 필요하지만 위치 기록은 필요하지 않습니다.

다음과 같은 상황에서는 WHS를 사용하세요.

  • 다른 센서의 데이터가 필요하거나, 향후 다른 센서의 데이터가 필요할 가능성이 높습니다.
  • 앱이 특정 시간 간격으로 위치 데이터를 추적해야 하는 운동 앱입니다.

iPhone과 페어링된 시계는 iPhone과 페어링된 시계의 위치 데이터를 참고하세요.

통합 위치 정보 제공자 사용

시계에서 FusedLocationProviderClient를 사용하여 위치 데이터를 가져옵니다. FLP가 휴대전화의 위치 데이터를 사용할 수 있습니다. 자세한 내용은 위치 서비스 클라이언트 만들기를 참고하세요.

위치 업데이트 요청과 연속적인 사용자 위치 추적에 관한 내용은 위치 업데이트 요청을 참고하세요.

온보드 GPS 감지

사용자가 내장 GPS 센서가 없는 시계를 착용하고 조깅을 하는데 이 시계와 페어링된 휴대전화를 두고 나온 경우, 시계 앱은 연결된 기기를 통해 위치 데이터를 가져올 수 없습니다. 앱에서 이러한 상황을 감지하고 위치 기능을 사용할 수 없다고 사용자에게 경고합니다.

시계에 내장 GPS 센서가 있는지 확인하려면 PackageManager.FEATURE_LOCATION_GPS를 사용하여 hasSystemFeature() 메서드를 호출하세요. 다음 코드는 활동이 시작될 때 시계에 내장 GPS 센서가 있는지 감지합니다.

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.")
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
}

private fun hasGps(): Boolean =
        packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)

Java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.");
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
    ...
}

private boolean hasGps() {
    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
}

연결 끊김 이벤트 처리

시계에 내장 GPS 센서가 없고 휴대전화와의 연결이 끊어지면 시계의 위치 데이터 스트림이 중단됩니다. 앱에서 일관된 데이터 스트림을 기대한다면 연결 중단을 감지하고, 사용자에게 경고하며, 위치 기능의 성능을 단계적으로 저하해야 합니다.

휴대기기에서와 같이 FusedLocationProviderClient.requestLocationUpdates()를 사용하여 위치 업데이트를 요청할 때 LocationCallback 또는 PendingIntent를 전달합니다. 둘 다 위치 정보와 LocationAvailability 상태를 포함합니다.

LocationCallback 옵션을 사용하는 경우 위치 사용 가능 여부 상태에 관한 업데이트를 수신하도록 onLocationAvailability()를 재정의합니다.

PendingIntent 옵션을 사용하고 Intent가 반환되면 LocationAvailability.extractLocationAvailability(Intent) 메서드를 사용하여 Intent에서 위치 사용 가능 여부 상태를 추출합니다.

찾을 수 없는 위치 처리

GPS 신호가 중단되면 사용자 시계의 마지막으로 알려진 위치를 검색할 수 있습니다. 마지막으로 알려진 위치 검색은 GPS 업데이트 위치를 가져올 수 없을 때와 시계에 내장 GPS가 없고 휴대전화와의 연결이 중단된 때 유용합니다. 자세한 내용은 마지막으로 알려진 위치 가져오기를 참고하세요.

일괄 호출을 통한 위치 플러시

일괄 호출을 사용하는 경우 화면이 다시 켜질 때 또는 대기 모드에서 돌아올 때 flushLocations()를 호출하여 일괄 위치를 등록된 모든 LocationListeners, LocationCallbacks, Pending Intents에 즉시 반환합니다.

  • 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
  • 진행 중인 활동