시간 개요

이 페이지에서는 Android에서 시간 및 시간대 감지가 작동하는 방식을 설명합니다. Android가 자동으로 시간과 시간대를 감지하는 방법, 기기 제조업체의 구성 옵션, 테스트 정보 등이 포함됩니다.

시간 및 시간대 개요

상태 표시줄 등의 위치에 표시할 사용자의 현지 시간을 결정하기 위해 Android는 2개의 서로 관련 있으나 독립적인 상태를 추적합니다.

  • 현재 Unix 에포크 시간
  • 현재 시간대

현재 Unix 에포크 시간과 현재 시간대는 기기 전체 상태여서 기기의 모든 사용자가 공유합니다.

현재 Unix 에포크 시간은 고정 값이 아닙니다. 시간의 경과를 반영하여 자동으로 업데이트됩니다. 일반적인 시간 경과 외에도, 예를 들어 기기의 전원 공급이 중단된 후 현재 Unix 에포크 시간이 잘못된 것으로 확인되면 조정됩니다.

현재 시간대는 현재 Unix 에포크 시간을 현지 시간으로 변환하기 위해 조정할 분량을 결정합니다. 예를 들어 로스앤젤레스의 여름에는 기기가 현재 Unix 에포크 시간에서 7시간을 빼고 겨울에는 8시간을 뺍니다.

이러한 현지 시간 계산을 지원하기 위해 모든 Android 기기에는 전체 글로벌 시간대 규칙의 데이터베이스가 있습니다. 시간대 규칙에 관한 자세한 내용은 시간대 규칙을 참고하세요.

사용자가 다른 시간대를 사용하는 새 위치로 이동하는 경우 현재 Unix 에포크 시간을 조정할 필요가 없습니다. 하지만 보통 사용자들은 예전의 위치가 아닌 현지 시간을 확인하길 원합니다. 현재 시간대를 변경하면 현재 Unix 에포크 시간에 올바른 오프셋이 적용되어 새 위치의 현지 시간이 올바르게 표시됩니다.

AOSP에서 사용자는 다음 메커니즘을 통한 시간 및 시간대의 자동 설정 여부를 독립적으로 제어할 수 있습니다.

  • 시간 자동 감지: 기기의 현재 Unix 에포크 시간이 올바른지 확인합니다.
  • 시간대 자동 감지: 기기의 현재 시간대가 올바른지 확인합니다.

시간 자동 감지

이 섹션에서는 시간 자동 감지, 사용자 컨트롤, 구성 옵션, 테스트 세부정보를 관리하는 time_detector 서비스에 관해 간략히 설명합니다.

time_detector 서비스

Android 10 이상을 실행하는 기기에 있는 time_detector 서비스는 시간 자동 감지를 관리합니다. 시간 자동 감지가 사용 설정되어 있으면 필요에 따라 기기의 현재 Unix 에포크 시간을 조정합니다.

time_detector 서비스는 항상 두 상태, 즉 불확실확실 중 하나입니다. 서비스의 확실한 상태 또는 불확실한 상태는 다양한 소스로부터 수신하는 시간 추천에 따라 결정됩니다.

time_detector 서비스가 확실한 상태인 경우, 즉 Unix 에포크 시간 정보가 포함된 추천을 수신한 경우 시간 추천이 현재 Unix 에포크 시간과 다르면 현재 Unix 에포크 시간을 재정의합니다.

time_detector가 불확실한 상태인 경우 현재 시간을 재정의하지 않습니다. 불확실한 상태는 일반적으로 time_detector 서비스에 시간 추천이 수신되지 않았음을 의미합니다. 수신한 추천이 너무 오래되어 사용할 수 없다고 판단되는 경우에도 time_detector 서비스는 불확실한 상태가 됩니다. 추천이 오래되었다고 판단하는 이유는 이전 Unix 에포크 시간 추천을 사용하는 조정이 장시간에 걸쳐 부정확하다고 간주되는 기기의 경과된 실시간 시계에 의존하기 때문입니다.

현재 Unix 에포크 시간을 자동으로 설정하기 위해 기기에는 사용할 수 있는 다양한 소스가 있습니다. 이 문서에서는 이러한 소스를 출처라고 합니다. time_detector 서비스는 출처를 기반으로 추천 시퀀스를 고유한 것으로 취급합니다.

time_detector 서비스는 스테이트풀(Stateful)입니다. 즉, 각 출처에서 나온 최근 추천의 기록을 남깁니다. 출처에 최신 Unix 에포크 시간 정보가 있는 경우 time_detector에 새로운 추천이 제공됩니다. time_detector 서비스는 추천을 수신하면 새 추천과 기존 추천을 재평가하여 기기 상태를 업데이트합니다.

UTC 시간은 국제적으로 합의된 것이지만 Android 기기에서 현재 Unix 에포크 시간을 설정하는 것이 항상 간단하지는 않은 이유는 다음과 같이 다양합니다.

  • Unix 에포크 시간은 UTC 시간과 미묘하게 다른 시간 기록 시스템입니다. 두 시간 간 변환에는 윤초가 발생하는 시기와 윤초가 출처에서 처리되는 방법에 관한 지식이 필요합니다.
  • 출처가 특정 시기나 특정 상황에서만 사용 가능할 수 있습니다. 예를 들어 네트워크 연결이 필요한 출처인 경우 기기가 인터넷에 연결된 동안에만 사용할 수 있습니다.
  • 출처가 부정확하거나 모호하거나 출처에 오류가 있을 수도 있습니다. 예를 들어 텔레포니 휴대폰 기지국에서 '세계시'를 올바르게 추적하지 않는 경우 텔레포니 출처에서 제공되는 시간 추천이 부정확할 수도 있습니다.
  • Unix 에포크 시간을 가져오는 동안 부정확성이 개입될 수도 있습니다. 예를 들어 네트워크 지연이나 버퍼링, 프로세스 일정 관리로 인해 Unix 에포크 시간이 부정확해질 수도 있습니다.
  • 추천을 수신한 후에 경과된 시간에 따라 추천을 조정하는 데 사용되는 참조 시계가 부정확할 수도 있습니다.

AOSP에서 기본적으로 사용하도록 구성된 두 가지 기본 시간 감지 출처는 다음과 같습니다.

  • 전화 통신: 네트워크 ID 및 시간대(NITZ) 전화 통신 신호를 사용합니다.
  • 네트워크: 네트워크 시간 프로토콜(NTP) 시간 서버를 사용합니다.

전화 통신 출처와 네트워크 출처는 모두 항상 사용 가능하지는 않은 외부 네트워크에 연결해야 합니다.

Android 12부터는 기본적으로 사용하도록 구성되지 않은 다음과 같은 출처도 지원합니다.

  • GNSS: GPS 위치 정보 제공자를 사용하여 GNSS 소스에서 시간을 가져옵니다.
  • 외부: 기기 제조업체가 자체 Unix 에포크 시간 소스를 통합할 수 있는 일반 출처입니다.

시간 설정

사용자는 AOSP 설정 앱의 시스템 > 날짜 및 시간에서 시간 자동 감지를 사용 설정할 수 있습니다.

설정의 시간 자동 감지

그림 1. 설정의 시간 자동 감지

다음 표에서는 AOSP 설정 앱의 시간 감지 관련 사용자 컨트롤을 설명합니다.

*Android 11 이하에서는 이 설정이 네트워크 시간 사용으로 표시됩니다.

AOSP 설정 위치 AOSP 설정 이름 범위 동작
시스템 > 날짜 및 시간 자동으로 시간 설정* 모든 사용자

전환 버튼

켜짐인 경우 기기가 현재 Unix 에포크 시간을 감지합니다. 꺼짐인 경우 기기의 시간을 수동으로 설정할 수 있는 컨트롤이 사용자에게 제공됩니다.

사용자가 시간을 직접 입력할 때는 Unix 에포크 시간이 아닌 현지 시간을 입력합니다. 현재 Unix 에포크 시간은 현재 시간대를 사용하여 계산되어 Unix 에포크 시간을 얻습니다.

구성

기기 제조업체는 사용할 출처, 신호의 우선순위를 지정하는 방법 등 다양한 방식으로 time_detector 서비스를 구성할 수 있습니다.

출처 우선순위 지정

Android 12부터 기기 제조업체는 core/res/res/values/config.xml 구성 파일을 변경하여 시간 자동 감지에 어느 시간 출처를 포함할지 그리고 time_detector가 어떤 우선순위로 이러한 출처를 고려할지를 지정할 수 있습니다.

Android 11 이하를 실행하는 기기의 경우 출처 우선순위는 ["telephony", "network"]로 하드코딩됩니다. 즉, 전화 통신 추천이 네트워크 추천보다 우선순위가 높습니다.

기본 AOSP 구성은 다음과 같습니다.

<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
     take precedence over lower ones.
     See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
<string-array name="config_autoTimeSourcesPriority">
    <item>network</item>
    <item>telephony</item>
</string-array>

Android 12에서 네트워크 및 전화 통신 추천은 기본적으로 사용되는 출처로 구성됩니다. 네트워크 시간 추천이 전화 통신 시간 추천보다 우선순위가 높습니다. 기기 제조업체는 출처의 순서를 변경하여 전화 통신의 우선순위가 더 높은 Android 11 이하 동작으로 되돌릴 수 있습니다.

기본적으로 우선순위가 가장 높은 유효한 추천이 기기의 현재 시스템 시계 시간과 몇 초 이내로 일치하면 기기 시간은 변경되지 않습니다. 이는 ACTION_TIME_CHANGED 인텐트를 수신 대기하는 설치 앱에 대해 작업이 생성되는 것을 방지하기 위한 것입니다.

허용되는 출처 값은 다음과 같습니다.

시간 하한값

Android 12에서는 time_detector 서비스에서 수신한 시간 추천의 유효성을 확인하는 데 사용되는 시간 하한값을 도입합니다. 시간 하한값은 빌드 타임스탬프에서 설정됩니다. 이는 기기의 시스템 이미지가 빌드되기 전에는 유효한 시간이 발생할 수 없다는 원칙에 따라 작동합니다. 시간 하한값 이전에 시간 추천이 발생하는 경우 time_detector 서비스는 이 추천을 삭제합니다. 빌드 타임스탬프가 올바르다면 이 추천이 유효할 수 없기 때문입니다.

Android 11 이하를 실행하는 기기의 경우 time_detector 서비스는 수신되는 Unix 에포크 시간 추천을 검증하지 않습니다.

Android는 시간 상한값을 적용하지 않습니다.

시간 디버깅 및 테스트

이 섹션에서는 time_detector 서비스 및 모든 출처에서 공유하는 다른 구성요소의 동작을 디버그하고 테스트하는 방법에 관한 정보를 제공합니다.

time_detector 서비스와 상호작용

time_detector 서비스의 구성 및 time_detector 서비스의 상태를 보려면 다음을 사용합니다.

adb shell cmd time_detector dump

시간대 감지를 디버그하고 테스트하기 위한 추가 명령어를 보려면 다음을 사용합니다.

adb shell cmd time_detector help

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

시간 자동 감지의 유효성을 확인하려면 테스터는 time_detector 서비스에서 사용 중인 출처를 알아야 합니다. 다음은 현재 출처와 서비스 상태에 관한 정보가 굵게 표시된 adb shell cmd time_zone_detector dump 명령어의 출력 예시입니다.

$ adb shell cmd time_detector dump

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=null
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=23717241
  mEnvironment.systemClockMillis()=1626707861336
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    ...
  Telephony suggestion history:
    ...
  Network suggestion history:
    ...
  Gnss suggestion history:
    ...
  External suggestion history:
    ...

이 정보는 다음과 같이 해석할 수 있습니다.

mEnvironment.isAutoTimeDetectionEnabled() 시간 자동 감지의 사용 설정 여부
mEnvironment.autoTimeLowerBound() 시간 추천의 유효성을 확인하는 데 사용되는 현재 하한값
mEnvironment.autoOriginPriorities() 사용 중인 출처 및 우선순위 순서

시간 변경 로그는 time_detector 서비스가 기기의 현재 Unix 에포크 시간을 변경한 경우를 보여줍니다.

추천 내역 정보는 각 출처에서 나온 추천 내용을 보여줍니다.

시간대 자동 감지

이 섹션에서는 시간대 자동 감지, 설정의 사용자 제어, 전화 통신 및 위치 시간대 감지, 테스트 세부정보를 관리하는 time_zone_detector 서비스를 간략히 설명합니다.

time_zone_detector 서비스

Android 11 이상을 실행하는 기기에 있는 time_zone_detector 서비스는 시간대 자동 감지를 관리합니다. 시간대 자동 감지가 사용 설정되어 있으면 필요에 따라 기기의 현재 시간대를 조정합니다.

시간대 자동 감지가 사용 설정된 경우 time_zone_detector는 두 상태, 즉 불확실확실 중 하나일 수 있습니다.

time_zone_detector 서비스가 확실한 상태인 경우 time_zone_detector 서비스가 강력한 시간대 정보를 수신했으며 이로 인해 현재 시간대가 재정의될 수 있음을 의미합니다. '불확실한 상태'인 경우는 정보를 수신하지 않았거나 신뢰도가 낮은 정보를 수신했으며 이로 인해 현재 시간대가 재정의되지 않음을 의미합니다.

time_zone_detector 서비스의 확실한 상태에는 time_zone_detector에 사용할 시간대 정보가 없거나 선택할 여러 시간대가 있는 상태가 포함될 수 있습니다. 이러한 상태는 다음과 같습니다.

  • 기기가 국제 수역이나 분쟁 지역과 같이 시간대가 없는 곳에 있는 경우 '시간대 없는 확실한 상태'에 진입합니다. 이 상태는 '불확실한 상태'와 비슷하지만 time_zone_detector가 시간대를 확인하기 위해 추가 조치를 취할 필요가 없음을 나타냅니다.
  • 모호하거나 경계 조건이 있는 경우 '시간대가 여러 개인 확실한 상태'에 진입합니다. 이 상태일 때 현재 시간대가 time_zone_detector에서 확신하는 시간대 중 하나이면 현재 시간대는 그대로 유지됩니다. 그렇지 않으면 사용 가능한 시간대 중 하나가 사용됩니다. 이에 따라 사용자가 이전에 시간대를 수동으로 선택한 경우나 기기가 경계에 가까워질 때 time_zone_detector가 고정성 요소를 갖게 됩니다.

time_zone_detector 서비스의 확실한 상태나 불확실한 상태는 출처에서 전송된 시간대 추천에 따라 결정됩니다.

일반적으로 time_zone_detector의 가능한 상태, 즉 확실불확실에 밀접하게 일치하는 두 가지 유형으로 추천이 제공됩니다. 다음은 추천 유형의 예입니다.

  • type = "uncertain", zoneIds = []

    • 출처가 시간대를 알 수 없습니다.
  • type = "certain", zoneIds = ["Europe/London"]

    • 출처가 '유럽/런던'입니다.
  • type = "certain", zoneIds = []

    • 출처가 확실하지만 현재 위치와 연결된 시간대 ID가 없습니다.
  • type = "certain", zoneIds = ["America/Denver", "America/Phoenix"]

    • 출처가 확실하며 응답이 두 시간대 중 하나이지만 'America/Denver'와 'America/Phoenix' 중에서 선택할 수 없습니다.

time_zone_detector 서비스는 출처를 기반으로 추천 시퀀스를 고유한 것으로 취급합니다. 출처에 따라 출처가 얼마나 확실한지를 나타내는 메타데이터도 추천에 포함될 수 있습니다.

time_zone_detector 서비스는 스테이트풀(Stateful)입니다. 즉, 각 출처에서 나온 최근 추천의 기록을 남깁니다. 이전 추천이 더 이상 올바르지 않은 경우, 즉 출처의 추천이 이제 달라졌거나 출처의 시간대 감지 기능을 사용할 수 없는 경우에는 새 추천이 time_zone_detector 서비스에 전송됩니다. time_zone_detector 서비스는 추천을 수신하면 새 추천과 기존 추천을 재평가하여 기기 상태를 업데이트합니다.

Android는 시간대 감지를 위해 다음 두 가지 출처를 지원합니다.

  • 전화 통신
  • 위치

time_zone_detector 서비스는 시간대를 결정하는 데 단일 출처만 사용합니다. 기기에서 위치 출처가 지원되는 경우 사용자가 구성한 시간대 설정에 따라 현재 사용할 출처가 결정됩니다. 현재 출처에서 제공되는 시간대가 불확실해지면 time_zone_detector는 다른 출처로 전환되지 않습니다. 현재 출처 외의 출처와 관련된 제안은 time_zone_detector에 의해 메모리에 보관될 수 있지만 현재 출처가 변경되지 않는 한 사용되지 않습니다. 사용자가 시간대 자동 감지 설정을 변경하면 현재 출처가 변경되는 경우 새 출처에 관해 제공되는 최근 추천이 사용됩니다.

Android 13 이상을 실행하는 기기에서 time_zone_detector 서비스는 전화 통신 대체 모드를 지원합니다. 이 모드에서는 위치 감지가 시간대를 감지할 수 없거나 위치 감지가 전화 통신 감지보다 시간대를 감지하는 데 시간이 더 오래 걸리는 경우 Android가 일시적으로 전화 통신 감지 제안을 사용합니다.

전화 통신 대체 모드는 전화 통신 및 위치 감지가 모두 지원되고 사용자가 시간대 설정에서 위치 정보를 사용하여 시간대 설정을 설정한 기기에 적용됩니다. 이 모드는 기기가 재부팅될 때와 비행기 모드가 꺼질 때 자동으로 설정됩니다. 전화 통신 대체 모드에서 time_zone_detector 서비스는 위치 출처가 특정 제안을 제공할 때까지 마치 위치 감지가 사용 중지된 것처럼 전화 통신 제안을 사용합니다. 특정 제안을 수신하면 전화 통신 대체 모드가 사용 중지되고 위치 제안이 단독으로 사용됩니다.

전화 통신 대체 모드의 구성 세부정보는 시간대 감지 구성을 참고하세요.

시간대 설정

사용자는 AOSP 설정 앱에서 시간대 자동 감지를 사용 설정하고 구성할 수 있습니다.

설정의 시간대 자동 감지

그림 2. 설정의 시간대 자동 감지

다음 표에서는 AOSP 설정 앱의 시간대 감지 관련 사용자 컨트롤을 설명합니다.

*Android 11 이하에서는 이 설정이 네트워크 시간대 사용으로 표시됩니다.

AOSP 설정 위치 AOSP 설정 이름 범위 동작
시스템 > 날짜 및 시간 자동으로 시간대 설정* 모든 사용자

전환 버튼

켜짐인 경우 기기가 현재 시간대를 감지합니다. 꺼짐인 경우 기기의 시간대를 수동으로 설정할 수 있는 컨트롤이 사용자에게 제공됩니다.

시스템 > 날짜 및 시간 위치 정보를 사용하여 시간대 설정 현재 사용자

전환 버튼

Android 12부터 사용할 수 있습니다. 이 전환 버튼은 기기에서 위치 시간대 감지가 지원되는 경우에만 표시됩니다.

위치 위치 사용 현재 사용자

전환 버튼

일반적으로 기기 위치 사용을 허용하거나 차단합니다. 이 값은 기기에서 위치 시간대 감지가 지원되는 경우에만 유효합니다.

다음은 사용자가 선택한 설정에 따른 시간대 감지 관련 기기 동작을 간략히 설명합니다.

  • [날짜 및 시간] 자동으로 시간대 설정: 꺼짐

    • 사용자가 수동으로 시간대를 선택해야 합니다.
  • [날짜 및 시간] 자동으로 시간대 설정: 켜짐

    • [위치] 위치 사용: 꺼짐

      • 전화 통신 신호를 사용하여 시간대를 감지합니다. (아래 내용 참고)
    • [위치] 위치 사용: 켜짐

      • [날짜 및 시간] 위치 정보를 사용하여 시간대 설정: 켜짐

        • 위치를 사용하여 시간대를 감지합니다.
      • [날짜 및 시간] 위치 정보를 사용하여 시간대 설정: 꺼짐

        • 전화 통신 신호를 사용하여 시간대를 감지합니다. (아래 내용 참고)

여러 사용자 기기

관련 설정 중 일부는 현재 사용자로 범위가 지정되므로 멀티 사용자 Android 기기에서 현재 사용자가 변경되면 기기의 시간대 감지 동작이 달라질 수 있습니다.

위치 정보를 사용하여 시간대 설 전환 버튼은 현재 사용자로 범위가 지정되며 기기 정책의 제한을 받지 않습니다. 즉, 자동으로 시간대 설정 전환 버튼이 꺼져 있을 때나 다른 시간 또는 시간대 컨트롤이 기기 정책 컨트롤러에 의해 제한되는 경우에도 사용자는 항상 값을 변경할 수 있습니다.

자동 감지를 사용 설정하거나 중지하는 경우 동작

사용자가 시간대 감지를 수동에서 자동으로 전환하면 time_zone_detector는 이미 현재 시간대를 확신할 수도 있습니다. 이 경우 사용자가 자동 감지를 사용 설정하면 기기의 시간대는 time_zone_detector 서비스의 추천과 일치하도록 동시에 변경될 수 있습니다.

마찬가지로 사용자가 설정을 변경하여 time_zone_detector 서비스의 현재 출처가 변경되면 time_zone_detector는 이미 새 출처의 추천을 수신했을 수도 있으므로 time_zone_detector 서비스의 추천과 일치하도록 기기의 시간이 즉시 변경될 수도 있습니다.

전화 통신 시간대 감지

전화 통신 시간대 감지는 전화 통신 신호를 사용하여 현재 시간대를 결정합니다. 자세한 내용은 전화 통신 시간대 감지를 참고하세요.

위치 시간대 감지

위치 시간대 감지는 Android 12 이상에서 사용할 수 있습니다. 기기가 위치를 사용하여 현재 시간대를 결정할 수 있는 시간대 자동 감지 기능으로, 선택사항입니다.

Android 12에 도입된 location_time_zone_manager 서비스는 시스템 서버에서 실행되는 것으로, time_zone_detector 서비스에 위치 출처 추천을 제출하는 코드를 포함합니다. 자세한 내용은 위치 시간대 감지를 참고하세요.

기능 채택 고려사항

이 섹션에서는 기기 제조업체가 기기에서 기능을 채택할지 여부를 판단하는 데 도움이 되는 위치 시간대 감지 기능의 측면을 설명합니다.

전화 통신 감지와 위치 감지 비교

다음 표에서는 시간대 감지를 위해 전화 통신 신호 대신 위치 정보를 사용할 때의 장단점을 비교합니다.

전화 통신 감지 위치 감지
정확성 국가에 따라 다릅니다.

MCC, NITZ의 정확성과 사용 가능 여부에 따라 다릅니다.
기능 구성이나 플러그인 구성요소에 따라 다릅니다.

정확성은 일반적으로 다음에 따라 다릅니다.
  • 위치 정보 제공자 정확성 및 규칙성
  • 시간대 지도 데이터의 품질
업데이트 가능성 전화 통신 감지는 업데이트 가능한 시간대 데이터 모듈(com.android.tzdata APEX)에 포함된 파일을 사용합니다. 기능 구성이나 플러그인 구성요소에 따라 다릅니다.

업데이트 가능성은 일반적으로 기기가 서버 또는 클라이언트 시간대 지도 데이터를 사용하는지에 따라 다릅니다.

참고: 시간대 지도 데이터는 Android의 TZDB 사본 및 기타 시간대 정보를 업데이트하는 데 사용되는 시간대 데이터 모듈에 포함되지 않습니다.

기기 제조업체는 시간대 규칙과 시간대 지도 데이터 간의 버전 일관성도 고려해야 합니다.
전력 사용량 없음 또는 전략 사용 낮음 사용자 위치 설정, 사용 중인 플러그인, 일반적으로 위치를 요청하는 다른 앱 등에 따라 다릅니다.
사용 가능 여부 전화 통신 기기 전용입니다. 일반적으로 작동하는 SIM이 필요합니다. 위치 감지는 사용 가능한 위치 정보 제공자에 따라 다릅니다.
사용자 개인 정보 보호

사용자의 기본 시간대는 일반적으로 지리적 위치에 따라 결정됩니다. 위치는 민감한 정보입니다. 시간대 감지의 일부로 사용자의 위치가 공유된다는 점을 사용자가 우려할 수도 있습니다. 시간대 감지와 관련 없이 기기에서 실행되는 모든 앱은 Android 권한을 요구하지 않고 기기의 현재 시간대를 읽을 수 있으며 앱은 이러한 정보를 통해 기기 위치에 관해 부정확한 아이디어를 추론할 수 있습니다.

구체적으로 시간대 감지는 수동적이거나 능동적인 수단을 통해 작동할 수 있습니다.

  • 수동: 기기 환경의 요소가 환경에서 사용할 시간대를 기기에 알려줍니다.
  • 능동: 기기가 자체적으로 그리고 사용자의 개인 정보 보호 설정과 동의에 따라 시간대를 설정해야 하며 그리고 위해 기기 위치 정보를 획득합니다. 그런 다음 외부 서비스와 위치 정보를 공유할 수 있습니다. 사용자 개인 정보 보호 및 동의에 관한 자세한 내용은 아래 설명을 참고하세요.

수동 감지(예: 전화 통신 출처 사용)는 사용자에게 개인 정보 보호 면에서 추가적인 영향을 미치지 않습니다.

능동 감지(예: 위치 출처 사용)에서는 사용자가 동의하지 않을 수도 있는 기기 위치 확인이 필요하며 시간대 ID를 결정하기 위해 네트워크를 통해 위치 정보가 전송될 수 있습니다.

시간대 감지와 관련한 Android의 사용자 개인 정보 보호 방식에서는 활성 상태일 것으로 예상되는 출처를 사용자가 개별적으로 사용 중지할 수 있습니다. 또한 AOSP 플랫폼 코드는 위치 자체를 직접 처리하지 않습니다. 위치 감지 및 위치와 시간대 ID 간 매핑은 기기 제조업체에서 구성한 플러그인 구성요소가 처리합니다.

사용자 개인 정보 보호 기능에 관한 자세한 내용은 위치 시간대 감지를 참고하세요.

구성

기기 제조업체는 time_zone_detector 서비스가 동작을 변경하도록 구성할 수 있습니다. 이 섹션에서는 time_zone_detector 서비스의 일반적인 동작을 위한 구성 옵션을 설명합니다. 전화 통신 및 시간대 감지 출처의 구성 세부정보는 전화 통신 시간대 감지위치 시간대 감지를 참고하세요.

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

구성 키 AOSP 값 설명
config_supportTelephonyTimeZoneFallback true true인 경우 'time_zone_detector'가 전화 통신 대체 모드를 사용합니다. 이 기능은 Android 13 및 이후 버전에서 제공됩니다.

시간대 디버깅 및 테스트

이 섹션에서는 time_zone_detector 서비스 및 모든 출처에서 공유하는 다른 구성요소의 동작을 디버그하고 테스트하는 방법에 관한 정보를 제공합니다.

device_config 서비스를 사용하여 기기 구성

device_config 서비스는 Android가 일반적으로 독점(비 AOSP) 코드로 원격 서버에서 가져오는 값을 사용하여 수정 가능한 동작을 구성하는 데 사용하는 메커니즘입니다. 특히 장시간의 수동 테스트 과정에서 테스트에 device_config 값을 사용하면 기기가 플래그를 동기화하여 플래그가 재설정되고 테스트에 설정된 값이 삭제될 수 있습니다.

Android 12 이상에서 플래그 동기화를 일시적으로 방지하려면 다음을 사용합니다.

adb shell cmd device_config set_sync_disabled_for_tests persistent

테스트 후 플래그 동기화를 복원하려면 다음을 사용합니다.

adb shell cmd device_config set_sync_disabled_for_tests none

플래그 동기화를 복원한 후 기기를 재부팅합니다.

자세한 내용을 보려면 $ adb shell cmd device_config help를 사용합니다.

time_zone_detector 서비스와 상호작용

time_zone_detector 구성 및 time_zone_detector 서비스의 상태를 보려면 다음을 사용합니다.

adb shell cmd time_zone_detector dump

시간대 감지를 디버그하고 테스트하기 위한 추가 명령어를 보려면 다음을 사용합니다.

adb shell cmd time_zone_detector help

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

시간대 감지의 유효성을 확인하려면 테스터는 time_zone_detector에서 사용 중인 출처를 알아야 합니다. time_zone_detector의 현재 출처를 이해하고 영향을 미치려면 다음 옵션 중 하나를 사용합니다.

  • 설정 UI를 통해 시각적으로 확인합니다. 자세한 내용은 시간대 설정을 참고하세요.
  • adb를 통해 명령줄을 사용하세요.

    • time_zone_detector 상태를 덤프하려면 adb shell cmd time_zone_detector dump를 사용합니다.
    • 기기 설정을 변경하려면 다른 time_zone_detector 명령어를 사용합니다. 자세한 내용을 보려면 adb shell cmd time_zone_detector help를 사용합니다.

다음은 현재 출처와 서비스 상태에 관한 정보가 굵게 표시된 adb shell cmd time_zone_detector dump 명령어의 출력 예시입니다.

$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
  mEnvironment.getCurrentUserId()=0
  mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
  [Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
  mEnvironment.isDeviceTimeZoneInitialized()=true
  mEnvironment.getDeviceTimeZone()=Europe/London
  Time zone change log:
  Manual suggestion history:
...
  Geolocation suggestion history:
...
  Telephony suggestion history:
...

이 정보는 다음과 같이 해석할 수 있습니다.

mUserConfigAllowed 기기 정책 컨트롤러에서 사용자가 날짜 및 시간 설정을 제어하는 것을 방지하는지 여부.
mTelephonyDetectionSupported 기기에 전화 통신 시간대 감지 기능이 있는지 여부.
mGeoDetectionSupported 기기에 위치 시간대 감지 기능이 있는지 여부. 이는 구성 하나 이상의 LTZP의 존재를 기반으로 한 유효 상태입니다.
mAutoDetectionEnabled 시간대 자동 감지가 사용 설정되었는지 여부.
mLocationEnabled 마스터 위치 전환 버튼.
mGeoDetectionEnabled 출처 전환: `false`는 전화 통신 출처를 나타내고 `true`는 위치 출처를 나타냅니다.

추천 내역 정보는 설정(수동)을 통해 그리고 전화 통신 및 위치 출처에서 나온 추천 내용을 보여줍니다.