위치 시간대 감지

Android 12 이상에서 사용할 수 있는 위치 시간대 감지는 기기가 위치 및 시간대 지도 데이터를 사용하여 시간대를 확인할 수 있는 시간대 자동 감지 기능(선택사항)입니다.

위치 시간대 감지는 전화 통신 시간대 감지의 대체 메커니즘입니다. 이 기능은 전화 통신이 필요하지 않기 때문에 모바일 통신 기기 외에도 다양한 폼 팩터의 기기에서 지원될 수 있습니다.

위치 시간대 감지 기능은 AOSP 플랫폼에서 다음 구성요소로 구성됩니다.

  • 시스템 서버의 시간대 감지 로직
  • 설정에서 사용자가 액세스하여 전화 통신 및 위치 시간대 감지 메커니즘 중에서 선택할 수 있는 옵션(Android 12에 도입)
  • 위치 감지 및 시간대 매핑을 실행하는 구성요소의 플러그인 시스템. 플러그인을 위치 시간대 제공자(LTZP)라고 하며 기기에 최대 두 개까지 있을 수 있습니다.
  • 참조 LTZP 구현
  • 참조 구현과 함께 사용할 수 있는 OpenStreetMap 데이터에서 참조 데이터 세트를 생성하는 호스트 도구

사용자 개인 정보 보호

위치 시간대 감지에는 다음과 같은 사용자 개인 정보 보호 기능이 포함됩니다.

  • 사용자는 언제든지 위치 시간대 감지를 사용 중지할 수 있습니다.
  • 위치에서 도출한 시간대 추천은 기기 사용자 간에 공유되지 않습니다.
  • 사용자는 날짜 및 시간 설정 화면을 통해 시간대 감지를 위한 위치 감지를 명시적으로 제어할 수 있습니다. 사용자는 권한 대화상자를 통해 명시적으로 권한을 부여할 필요가 없습니다.
  • 기기 위치 정보는 Android 플랫폼 서비스에 전달되지 않습니다. 대신 다음과 같이 처리됩니다.

    • LTZP에서 제공된 시간대 ID만(기기 위치 아님) 시간대 감지 서비스에 전송됩니다. 위치 시간대 감지를 지원하는 데 필요한 최소 API입니다.
    • 개별 LTZP의 작업은 시스템 통합자가 결정해야 합니다. LTZP 구현은 Android 기기에 전적으로 유지되는 시간대 지도 데이터를 사용하거나 서버를 활용하거나 하이브리드 방식을 사용할 수 있습니다.

기능 동작

time_zone_detector 서비스는 감지 출처에서 수신한 추천에 따라 기기의 현재 시간대를 변경할 시기를 결정합니다.

location_time_zone_manager 서비스는 time_zone_detector의 위치 출처와 관련한 추천을 생성합니다. location_time_zone_manager 서비스는 시스템 서버 프로세스에서 실행됩니다.

location_time_zone_manager 서비스에는 시간대 감지 로직이 없습니다. 이 서비스는 위치 시간대 제공자(LTZP)라는 플러그인 한두 개의 수명 주기를 관리합니다.

위치 시간대 감지가 필요하지 않을 때는 LTZP가 시작되지 않습니다. 즉, 위치 시간대 감지 시스템은 명시적으로 필요하지 않은 경우 LTZP에 기기 위치 추적을 요청하지 않습니다. 이렇게 동작하는 이유는 다음과 같습니다.

  • 일반적인 전화 통신 작업 과정에 수동적으로 수신되는 전화 통신 신호와 달리, Android 위치 정보 제공자에서 적극적으로 위치를 요청할 수 있으며 이에 따라 추가적인 전력이 소비될 수 있습니다.
  • 위치 설정은 사용자가 범위를 설정하며 Android는 현재 사용자의 설정을 따라야 합니다.
  • 기기 위치 가져오기는 개인 정보 보호에 민감합니다.

또한 location_time_zone_manager 서비스는 현재 사용자가 변경될 때 불확실한 추천(필요한 경우)을 제공하여 사용자 간의 위치 정보 공유를 방지합니다.

이러한 선택의 결과, 일반적으로 현재 출처를 위치로 전환한 후 또는 현재 사용자를 전환한 후에 시간대를 감지하기까지 몇 초 정도 걸립니다. 이 시간은 사용되는 LTZP의 구현에 따라서도 다릅니다.

AOSP 위치 시간대 감지 구현은 아래에 정의된 대로 기본 LTZP와 보조 LTZP 등 최대 두 개까지 허용합니다.

기본 LTZP
사용자가 위치 시간대 감지 기능이 실행되도록 허용한 경우 항상 실행됩니다.
보조 LTZP
기본 LTZP에서 시간대가 불확실하다고 보고하거나 영구 실패를 보고하거나 초기화 중에 타임아웃되면 실행됩니다. 기본 LTZP가 특정 추천을 제출하면 중지됩니다.

그림 1과 같이 time_zone_detector 서비스는 전화 통신 또는 위치 출처에서 시간대 추천을 수신합니다. 위치 출처는 기본 LTZP나 보조 LTZP에서 추천을 수신합니다.

위치 시간대 감지 정보 흐름

그림 1. 위치 시간대 감지 정보 흐름

기기 설정 요구사항

위치 시간대 기능을 지원하려면 기기에서 사용할 수 있는 LTZP로 기기를 구성해야 합니다. 위치 시간대 감지가 작동하고 사용자에게 설정에 표시되려면 기기에서 LTZP를 하나 이상 사용 설정하고 구성해야 합니다.

기기 설정

이 섹션에서는 기기 제조업체가 위치 시간대 감지를 지원하도록 기기를 구성하는 방법을 설명합니다.

기본 AOSP 구성은 frameworks/base/core/res/res/values/config.xml에 있습니다.

구성 키 AOSP 값 설명
config_enableGeolocationTimeZoneDetection true 위치 시간대 감지 기능의 마스터 컨트롤입니다.

기능이 AOSP에서 기본적으로 지원됩니다. LTZP를 하나 이상 사용 설정하거나 구성해야 사용자가 이 기능을 사용할 수 있습니다.

값을 false로 설정하면 약간의 메모리를 절약하기 위해 기능이 완전히 사용 중지됩니다.
config_enablePrimaryLocationTimeZoneProvider false 이렇게 하면 기본 LTZP가 사용 설정됩니다.
config_primaryLocationTimeZoneProviderPackageName 기본 제공자 서비스를 찾을 수 있는 앱의 패키지 이름으로 설정합니다.
config_enableSecondaryLocationTimeZoneProvider false 이렇게 하면 보조 LTZP가 사용 설정됩니다.
config_secondaryLocationTimeZoneProviderPackageName 보조 제공자 서비스를 찾을 수 있는 앱의 패키지 이름으로 설정합니다.

기본적으로 AOSP 구성에서는 config_enableGeolocationTimeZoneDetection 키가 true로 설정되어 위치 시간대 감지 기능이 지원됩니다. AOSP에는 기본적으로 LTZP 구성이 포함되어 있지 않으므로 이 기능은 처음에는 사용자에게 표시되지 않습니다. 그러나 기기 제조업체는 이 기본 구성을 사용하여 테스트용으로 명령줄에서 LTZP를 사용 설정하고 시뮬레이션할 수 있습니다. 자세한 내용은 디버깅 및 테스트를 참고하세요.

위치 시간대 제공자 구성 및 배포

LTZP를 구성할 때 frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java의 소스 코드 안내를 읽어보세요. Javadoc 주석은 서비스, 필요한 권한, 기타 구성에 관한 세부정보를 제공합니다.

위치 시간대 제공자를 구성하려면 기기 제조업체는 LTZP의 서비스를 호스팅할 앱 프로세스를 선택해야 합니다. LTZP 전용 프로세스가 있으면 많은 오버헤드가 발생합니다. 이상적으로는 선택한 앱 프로세스가 시스템 서버와 같이 항상 실행되는 프로세스입니다.

모듈식 시스템 구성요소(모듈)가 있는 기기에서 LTZP에 사용되는 지리 데이터와 시간대 데이터 모듈(com.android.tzdata)에 전달되는 시간대 규칙(tzdb) 간의 상호작용을 고려합니다. 한쪽의 업데이트 없이 다른 한쪽이 업데이트되면 버전 왜곡 문제가 발생할 수 있습니다. 자세한 내용은 기능 채택 고려사항을 참고하세요.

AOSP 참조 위치 시간대 제공자

AOSP에는 packages/modules/GeoTZ에 참조 위치 시간대 제공자 구현이 포함되어 있습니다. 이 참조 구현에서는 AOSP API를 사용하여 기기의 위치를 확인하고 기기 내 데이터 파일을 사용하여 시간대 ID 집합에 위치를 매핑합니다.

다른 오픈소스 프로젝트에서 파생된 참조 데이터 세트가 소스 코드에 포함됩니다. 자세한 내용은 README.md 및 다양한 라이선스 파일을 참고하세요.

디버깅 및 테스트

다음 섹션에서는 위치 시간대 감지 기능을 디버깅하고 테스트하기 위한 셸 명령어를 설명합니다.

location_time_zone_manager 서비스와 상호작용

Android 12 이상을 실행하는 기기에서 위치 출처가 지원되는 경우 Android는 부팅 시 location_time_zone_manager 서비스를 인스턴스화합니다.

location_time_zone_manager의 현재 상태를 덤프하려면 다음을 사용합니다.

adb shell cmd location_time_zone_manager dump

테스트를 지원하는 광범위한 명령줄 옵션을 보려면 다음을 사용합니다.

adb shell cmd location_time_zone_manager help

도움말 출력은 테스트용으로 또는 프로덕션에서 time_zone_detector의 동작에 영향을 미치는 데 사용할 수 있는 device_config 서비스 속성도 설명합니다. 자세한 내용은 device_config 서비스를 사용하여 기기 구성을 참고하세요.

LTZP 구현은 자체 디버깅 또는 테스트도 지원할 수 있습니다. 예를 들어 AOSP 참조 LTZP가 시스템 서버 프로세스에 등록되면 다음 명령어를 디버그할 수 있습니다.

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService