Android 11 veya önceki sürümleri çalıştıran cihazlar için AOSP'deki otomatik saat dilimi algılama özelliği, telefon alt sisteminden gelen sinyallerden yararlanır. Telefon alt sistemine bağımlı olması nedeniyle Android 11 veya önceki sürümlerde otomatik saat dilimi algılama özelliği, telefon cihazlarıyla sınırlıdır.
Telefon saat dilimi algılama özelliği kullanılabilir olduğunda Mobil Ülke Kodu (MCC) ve Ağ Kimliği ve Saat Dilimi (NITZ) sinyallerini kullanır.
Örneğin, Fransa'daki bir cihaz, saat dilimini yalnızca yakındaki baz istasyonları tarafından bildirilen MM'ye dayanarak tanımlayabilir. Bunun nedeni, Fransa'nın tek bir saat dilimi kullandığının bilinmesidir.
Bir ülkede birden fazla saat dilimi kullanılıyorsa saat dilimini belirlemek için yalnızca MCC 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 çalışır 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 özelliği, pasif bir algılayıcıdır. Bu algoritma her zaman çalışır. Bu nedenle, etkin time_zone_detector
algoritması şu anda telefon değilse bile genellikle telefon önerileri yapılır.
Telefon saat dilimi algılamayla 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'in yalnızca ofset ve yaz saati bilgilerini içermesidir. Bu bilgiler, bir 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ış aylarında NITZ sinyalleri kullanılarak ayırt edilemez ancak diğer mevsimlerde ayırt edilebilir. Benzer şekilde örtüşen saat dilimlerine sahip tüm konumlarda bu tür sorunlar yaşanabilir.
Aşağıdaki tabloda, Denver ve Phoenix'te sezona göre cihaz davranışı ayrıntılı olarak açıklanmıştır:
Konum ve sezon | MCC veya NITZ'den alınan bilgiler | Algılanan saat dilimi ve davranış |
---|---|---|
Denver, Colorado Kış |
Zaman: 1 Ocak 2021 12:00:00 Ülke: ABD Ofset: UTC-7, yaz saati yok |
İki bölge kimliği eşleşiyor:
Cihaz, Amerika/Denver olarak doğru ayarlanmıştır. |
Phoenix, Arizona Kış |
Zaman: 1 Ocak 2021 12:00:00 Ülke: ABD Ofset: UTC-7, yaz saati yok |
İki bölge kimliği eşleşiyor:
Cihaz yanlış bir şekilde America/Denver olarak ayarlanmış. |
Denver, Colorado Yaz |
Saat: 1 Temmuz 2021 12:00:00 Ülke: ABD Zaman farkı: UTC-6, yaz saati uygulaması |
Bir bölge kimliği eşleşiyor:
Cihaz doğru olarak America/Denver olarak 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şiyor:
Cihaz doğru olarak America/Phoenix olarak ayarlanmış. |
Yukarıdaki örneklerde, Denver veya Arizona'daki Android cihazların kış aylarında iki eşleşen saat dilimi kimliğinden birini seçmesi gerektiği gösterilmektedir. Bu kimlik bazı cihazlar için yanlış olabilir ancak yerel saati doğru olarak gösterebilir. Cihaz saati, takvimler ve diğer uygulamalar, saat dilimi kimliği yanlış olsa bile kış aylarında aynı yerel saati hesapladığından beklenen yerel saati gösterir.
Ancak, Denver'da yaz saati uygulanırken Phoenix'te uygulanmadığı bahar aylarında, kullanıcının konumu için yanlış saat dilimi kimliğine ayarlanmış bazı cihazlar geçici olarak yanlış yerel saati gösterebilir. Bu durum, cihaz yeni bir NITZ sinyali (özellikle "UTC-7, yaz saati yok" ofset bilgisi içeren bir sinyal) alır almaz düzeltilir ancak bu işlem biraz zaman alabilir ve operatörlere bağlıdır.
Sonuç olarak, saat dilimi kimliğini kıştan bahara dek depolayan 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 saat dilimi algılama özelliğinde hata ayıklama ve test için kullanılan kabuk komutları açıklanmaktadır.
Test ortamı kurulumu
Testçiler, 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 bunların etkilerini izlemek için kullanılabilir.
Cihazın saat dilimini algılayabilmesi için NITZ sinyal bilgilerinin doğru, MCC ile tutarlı 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 içinse NITZ sinyali, ABD'nin bir yerinde doğru olan bir "evrensel saat", ofset ve yaz saati bilgilerini içermelidir.
com.android.phone hizmetiyle etkileşimde bulunma
Cihazın telefon için doğru saat dilimi önerilerini aldığını doğrulamak üzere şunu kullanın:
adb shell dumpsys activity service \
com.android.phone/com.android.phone.TelephonyDebugService
Bu işlem, Android hata raporlarında da bulunan telefon bilgilerinin dökümünü alır. Birden fazla SIM kullanılan cihazlarda her SIM radyo için bilgi vardır.
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")]}