Telefon Saat Dilimi Algılama

Android 11 veya daha önceki sürümleri çalıştıran cihazlar için AOSP'deki otomatik saat dilimi tespiti, 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, telefon cihazlarıyla sınırlıdır.

Telefon zaman dilimi tespiti mevcut olduğunda, Mobil Ülke Kodu (MCC) ve Ağ Kimliği ve Zaman Dilimi (NITZ) sinyallerini kullanarak çalışır.

Örneğin, Fransa'daki bir cihaz, yalnızca yakındaki baz istasyonları tarafından bildirilen MM'ye dayanarak saat dilimini tanımlayabilir. Bu mümkün çünkü Fransa'nın tek bir saat dilimi kullandığı biliniyor.

Bir ülke birden fazla saat dilimi kullandığında MM tek başına saat dilimini tanımlamak için yeterli değildir. Cihaz, bu ülkeler için doğru saat dilimini belirlemek amacıyla NITZ sinyallerini de kullanır. Bu, dünyanın birçok yerinde işe yarar ancak NITZ sinyallerinin hem mevcut hem de doğru olmasını gerektirir ve bu nedenle taşıyıcılara bağımlıdır.

Telefon zaman dilimi tespiti pasif bir dedektördür. Her zaman çalışır ve bu nedenle, aktif time_zone_detector algoritması şu anda telefon olmadığında bile telefon önerileri sıklıkla yapılır.

Telefon zaman dilimi algılamasının sınırlandırılması

Doğru NITZ sinyalleri mevcut olsa bile, telefon zaman dilimi tespiti her ülkede her zaman iyi çalışmaz. Bunun nedeni, NITZ'in yalnızca mahsup ve gün ışığından yararlanma bilgilerini içermesidir; bunlar, bir saat dilimini benzersiz şekilde tanımlamak için her zaman yeterli değildir.

Dünyada bu saat dilimi sorununun yaşanabileceği pek çok yer var. Örneğin, ABD'deki Denver Colorado ve Phoenix Arizona, kış aylarında NITZ sinyallerini kullanarak ayırt edilemez, ancak diğer mevsimlerde ayırt edilebilir. Benzer şekilde çakışan saat dilimlerine sahip herhangi bir konum bu tür sorunlarla karşılaşabilir.

Aşağıdaki tablo, örnek olarak Denver ve Phoenix için mevsime bağlı olarak cihaz davranışını göstermektedir:

Yer ve sezon MM veya NITZ'den gelen bilgiler Algılanan saat dilimi ve davranış
Denver, Colorado
Kış
Saat: 1 Ocak 2021 12:00:00
Ülke: ABD
Ofset: UTC-7, yaz saati uygulaması yok
İki bölge kimliği eşleşiyor:
  • Amerika/Denver
  • Amerika/Anka Kuşu

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

Cihaz yanlış şekilde Amerika/Denver'a ayarlanmış.
Denver, Colorado
Yaz
Saat: 1 Temmuz 2021 12:00:00
Ülke: ABD
Ofset: UTC-6, gün ışığından yararlanma
Bir bölge kimliği eşleşir:
  • Amerika/Denver

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

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

Yukarıdaki örnekler, kış aylarında Denver veya Arizona'daki Android cihazların eşleşen iki saat dilimi kimliğinden birini seçmesi gerektiğini göstermektedir. Bu, bazı cihazlar için yanlış olabilir ancak yine de görünüşte doğru bir yerel saat görüntüleyebilir. Her iki saat dilimi kimliği de kış aylarında aynı yerel saati hesapladığından, saat dilimi kimliği yanlış olsa bile cihaz saati, takvimler ve diğer uygulamalar beklenen yerel saati görüntüler.

Ancak ilkbaharda Denver'ın yaz saati uygulamasını uyguladığı ve Phoenix'in bunu yapmadığı durumlarda, bazı cihazlar kullanıcının konumu için yanlış saat dilimi kimliğine ayarlanmışsa geçici olarak yanlış yerel saati gösterebilir. Bu durum, cihaz yeni bir NITZ sinyali (özellikle "UTC-7, yaz saati uygulaması yok" dengeleme bilgisini içeren bir sinyal) alır almaz düzeltilir, ancak bu biraz zaman alabilir ve operatörlere bağlıdır.

Sonuç olarak, kıştan ilkbahara saat dilimi kimliğini saklayan veya taşıyan takvimler veya diğer uygulamalar, ilgili uygulamalar saat dilimi kimliğini güncelleyene kadar yanlış yerel saati görüntüleyebilir ve kullanabilir.

Hata ayıklama ve test etme

Aşağıdaki bölümde telefon saat dilimi algılama özelliğinde hata ayıklama ve test etmeye yönelik kabuk komutları açıklanmaktadır.

Test ortamı kurulumu

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

Cihazın saat dilimini tespit edebilmesi için NITZ sinyal bilgilerinin doğru olması, MCC ile tutarlı olması ve cihazın IANA TZDB kopyasıyla (saat dilimi kuralları) eşleşmesi gerekir. MCC 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 içinse, NITZ sinyalinin ABD'de bir yer için doğru olan bir "evrensel saat", fark ve yaz saati uygulaması bilgilerini içermesi gerekir.

com.android.phone hizmetiyle etkileşim kurma

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

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

Bu, Android hata raporlarında da bulunabilecek telefon bilgilerini döker. Birden fazla SIM'e sahip cihazlarda her SIM radyosu için bilgi bulunur.

Saat dilimi Günlükleri, telefon işleminin 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")]}