Telefon saat dilimi algılama

Android 11 veya önceki sürümleri çalıştıran cihazlarda AOSP'deki otomatik saat dilimi algılama, telefon alt sisteminden gelen sinyallere dayanır. Telefon alt sistemine bağımlılık nedeniyle Android 11 veya önceki sürümlerde otomatik saat dilimi algılama özelliği yalnızca telefon cihazlarıyla sınırlıdır.

Telefoni saat dilimi algılama özelliği kullanılabildiğinde mobil ülke kodu (MCC) ve Ağ Kimliği ve Saat Dilimi (NITZ) sinyallerini kullanarak çalışır.

Örneğin, Belçika'daki bir cihaz, saat dilimini yalnızca yakındaki baz istasyonları tarafından bildirilen MCC'ye göre belirleyebilir. Belçika'nın tek bir saat dilimi kullandığı bilindiği için bu mümkündür.

Bir ülke birden fazla saat dilimi kullandığında, saat dilimini tanımlamak için tek başına MM yeterli değildir. Bu ülkelerde cihaz, doğru saat dilimini belirlemek için NITZ sinyallerini de kullanır. Bu yöntem, dünyanın birçok yerinde iyi sonuç verir ancak NITZ sinyallerinin hem kullanılabilir hem de doğru olması gerekir. Bu nedenle, operatörlere bağlıdır.

Telefon saat dilimi algılama pasif bir algılayıcıdır. Her zaman çalışır ve bu nedenle, etkin algoritma şu anda telefon görüşmesi olmasa bile telefon görüşmesi önerileri sık sık yapılır.time_zone_detector

Telefon görüşmesi saat dilimi algılamasıyla ilgili sınırlama

Doğru NITZ sinyalleri mevcut olsa bile telefon saat dilimi algılama özelliği her ülkede her zaman iyi çalışmaz. Bunun nedeni, NITZ'nin yalnızca saat farkı ve yaz saati bilgileri içermesidir. Bu bilgiler, saat dilimini benzersiz şekilde tanımlamak için her zaman yeterli değildir.

Dünyada bu saat dilimi sorununun yaşanabileceği birçok yer vardır. Örneğin, ABD'deki Denver Colorado ve Phoenix Arizona, kışın NITZ sinyalleri kullanılarak ayırt edilemez ancak diğer mevsimlerde ayırt edilebilir. Benzer şekilde çakışan saat dilimlerine sahip tüm konumlar bu tür bir sorun yaşayabilir.

Aşağıdaki tabloda, örnek olarak Denver ve Phoenix'teki cihaz davranışları sezona göre açıklanmaktadır:

Konum ve sezon MCC veya NITZ'den alınan bilgiler Algılanan saat dilimi ve davranış
Denver, Colorado
Kış
Saat: 1 Ocak 2021 12:00:00
Ülke: ABD
Saat farkı: UTC-7, yaz saati uygulaması yok
İki bölge kimliği eşleşiyor:
  • America/Denver
  • America/Phoenix

Cihaz, Amerika/Denver'a doğru şekilde ayarlanmış.
Phoenix, Arizona
Kış
Saat: 1 Ocak 2021 12:00:00
Ülke: ABD
Saat farkı: UTC-7, yaz saati uygulaması yok
İki bölge kimliği eşleşiyor:
  • America/Denver
  • America/Phoenix

Cihaz, yanlışlıkla America/Denver olarak ayarlanmış.
Denver, Colorado
Yaz
Saat: 1 Temmuz 2021 12:00:00
Ülke: ABD
Saat farkı: UTC-6, yaz saati
Bir bölge kimliği eşleşiyor:
  • America/Denver

Cihaz, Amerika/Denver'a doğru şekilde ayarlanmış.
Phoenix, Arizona
Yaz
Saat: 1 Temmuz 2021 12:00:00
Ülke: ABD
Saat farkı: UTC-7, yaz saati uygulaması yok
Bir bölge kimliği eşleşiyor:
  • America/Phoenix

Cihaz, America/Phoenix'e doğru şekilde ayarlanmış.

Tablodaki örnekler, kış aylarında Denver veya Arizona'daki Android cihazların iki eşleşen saat dilimi kimliğinden birini seçmesi gerektiğini gösteriyor. Bu kimlikler bazı cihazlar için yanlış olabilir ancak yine de görünürde doğru bir yerel saat gösterir. Saat dilimi kimliği yanlış olsa bile cihaz saati, takvimler ve diğer uygulamalar beklenen yerel saati gösterir. Bunun nedeni, her iki saat dilimi kimliğinin de kışın aynı yerel saati hesaplamasıdır.

Ancak ilkbaharda Denver yaz saatine geçerken Phoenix geçmediği için bazı cihazlar, kullanıcının konumuna göre yanlış saat dilimi kimliğine ayarlanmışsa geçici olarak yanlış yerel saati gösterebilir. Bu sorun, cihaz yeni bir NITZ sinyali (özellikle "UTC-7, yaz saati uygulaması yok" telafi bilgisini içeren bir sinyal) aldığında düzeltilir ancak bu işlem biraz zaman alabilir ve operatörlere bağlıdır.

Sonuç olarak, kıştan bahara saat dilimi kimliğini saklayan veya aktaran takvimler ya da diğer uygulamalar, ilgili uygulamalar saat dilimi kimliğini güncelleyene kadar yanlış yerel saati gösterebilir ve kullanabilir.

Hata ayıklama ve test

Aşağıdaki bölümde, telefon görüşmesi saat dilimi algılama özelliğinde hata ayıklama ve test için kullanılan kabuk komutları açıklanmaktadır.

Test ortamı kurulumu

Test uzmanları, telefon saat dilimi algılama davranışını kontrol etmek için genellikle test veya simüle edilmiş bir telefon hücresi içeren bir test ortamı kullanır. Test hücresi, farklı MCC'lere sahip ağları simüle etmek, cihazlara NITZ sinyalleri göndermek ve ardından etkilerini izlemek için kullanılabilir.

Cihazın saat dilimini algılayabilmesi için NITZ sinyal bilgilerinin doğru olması, MCC ile tutarlı olması ve cihazın IANA TZDB (saat dilimi kuralları) kopyasıyla eşleşmesi gerekir. MM ile tutarsız olan NITZ sinyalleri, telefon algoritmasının belirsizleşmesine neden olur.

Örneğin, test hücresi tarafından kullanılan MCC ABD'ye aitse NITZ sinyali, ABD'de bir yer için doğru olan bir UTC, uzaklık ve yaz saati bilgisi içermelidir.

com.android.phone hizmetiyle etkileşimde bulunma

Cihazın doğru telefon saat dilimi önerileri aldığını doğrulamak için: kullanın:

adb shell dumpsys activity service \
    com.android.phone/com.android.phone.TelephonyDebugService

Bu işlem, Android hata raporlarında da bulunabilen telefon bilgileri dökümünü oluşturur. Birden fazla SIM'i olan cihazlarda her SIM radyosu için bilgiler bulunur.

Saat dilimi günlükleri, telefon hizmeti sürecinin time_zone_detector'a gönderdiği önerileri ve önerilerin gönderilme nedenlerini gösterir.

TimeServiceHelperImpl:
          SystemClock.elapsedRealtime()=11864061
          System.currentTimeMillis()=1620652067178
          Time Logs:
...

Time zone Logs:
    18602 / 2021-05-10T09:50:21.718Z - Suggesting time zone update:
    TelephonyTimeZoneSuggestion{mSlotIndex=0, mZoneId='null', mMatchType=0, mQuality=0,
    mDebugInfo=[getTimeZoneSuggestion: nitzSignal=TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}},
    countryIsoCode=null, Detection
    reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}})]}
    18831 / 2021-05-10T09:50:21.948Z - Suggesting time zone update:
    TelephonyTimeZoneSuggestion{mSlotIndex=0, mZoneId='Europe/London', mMatchType=3, mQuality=1,
    mDebugInfo=[findTimeZoneFromCountryAndNitz: countryIsoCode=gb,
    nitzSignal=TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}},
    findTimeZoneFromCountryAndNitz: lookupResult=OffsetResult{mTimeZone(ID)=Europe/London,
    mIsOnlyMatch=true}, Detection reason=handleCountryDetected("gb")]}