위치 시간대 감지

Android 12 이상에서 사용할 수 있는 위치 시간대 감지는 장치가 위치 및 시간대 지도 데이터를 사용하여 시간대를 결정할 수 있도록 하는 선택적 자동 시간대 감지 기능입니다.

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

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

  • 시스템 서버의 시간대 감지 논리.
  • Android 12에 도입된 설정의 사용자 액세스 옵션으로, 사용자가 전화 통신과 위치 시간대 감지 메커니즘 중에서 선택할 수 있습니다.
  • 위치 감지 및 시간대 매핑을 수행하는 구성 요소용 플러그인 시스템. 플러그인을 LTZP( Location Time Zone Provider )라고 하며 장치에 최대 2개까지 있을 수 있습니다.
  • 참조 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(Location Time Zone Providers)라고 하는 하나 또는 두 개의 플러그인 수명 주기 관리를 담당합니다.

위치 시간대 감지가 필요하지 않으면 LTZP가 시작되지 않습니다. 즉, 위치 시간대 감지 시스템은 명시적으로 요구되지 않는 한 LTZP에 장치 위치를 추적하도록 요청하지 않습니다. 이 동작의 몇 가지 이유는 다음과 같습니다.

  • 일반적인 전화 통신 작업의 일부로 수동적으로 수신되는 전화 통신 신호와 달리 위치는 Android 위치 제공자로부터 능동적으로 요청할 수 있으며 추가 전력을 소비할 수 있습니다.
  • 위치 설정은 사용자 범위이며 Android는 현재 사용자의 설정을 존중해야 합니다.
  • 장치의 위치를 ​​​​얻는 것은 개인 정보에 민감합니다.

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

이러한 선택의 결과로 현재 원점을 위치로 전환한 후 또는 현재 사용자를 전환한 후 표준 시간대를 감지할 수 있으려면 일반적으로 몇 초가 걸립니다. 이것은 또한 사용 중인 LTZP의 구현에 따라 다릅니다.

AOSP 위치 시간대 감지 구현은 최대 2개의 LTZP, 즉 여기에 정의된 기본 및 보조 LTZP를 허용합니다.

기본 LTZP
사용자가 위치 시간대 감지 기능을 실행하도록 허용한 경우 항상 실행됩니다.
보조 LTZP
기본 LTZP가 시간대가 불확실하다고 보고하거나, 영구적인 오류를 보고하거나, 초기화 중에 시간이 초과되면 실행됩니다. 기본 LTZP가 특정 제안을 제출하면 중지합니다.

그림 1과 같이 time_zone_detector 서비스는 전화 통신 또는 위치 출처로부터 시간대 제안을 수신합니다. 위치 원점은 1차 또는 2차 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 및 다양한 LICENSE 파일을 참조하십시오.

디버깅 및 테스트

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

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