Android 11 veya daha eski sürümleri çalıştıran cihazlar için, AOSP'deki otomatik saat dilimi algılaması, 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ılaması telefon cihazlarıyla sınırlıdır.
Telefon zaman dilimi algılaması mevcut olduğunda, Mobil Ülke Kodu (MCC) ve Ağ Kimliği ve Saat Dilimi (NITZ) sinyallerini kullanarak çalışır.
Örneğin, Fransa'daki bir cihaz, yalnızca yakındaki baz istasyonları tarafından bildirilen MM'ye dayalı olarak saat dilimini tanımlayabilir. Bu mümkündür, çünkü Fransa'nın tek bir zaman dilimi kullandığı bilinmektedir.
Bir ülke birden çok saat dilimi kullandığında, saat dilimini tanımlamak için tek başına MM yeterli değildir. Bu ülkeler için cihaz, doğru saat dilimini belirlemek için NITZ sinyallerini de kullanır. Bu, dünyanın birçok yerinde iyi çalışır ancak NITZ sinyallerinin hem kullanılabilir hem de doğru olmasını gerektirir ve bu nedenle taşıyıcılara bağlıdır.
Telefon zaman dilimi algılaması pasif bir dedektördür. Her zaman çalışır ve bu nedenle, time_zone_detector
orijini şu anda telefon olmadığında bile telefon önerileri genellikle yapılır.
Telefon zaman dilimi algılamasının sınırlandırılması
Doğru NITZ sinyalleri mevcut olsa bile, telefonun saat dilimi algılaması her ülkede her zaman iyi çalışmaz. Bunun nedeni, NITZ'nin yalnızca bir saat dilimini benzersiz şekilde tanımlamak için her zaman yeterli olmayan ofset ve gün ışığından yararlanma bilgilerini içermesidir.
Dünyada bu saat dilimi sorununun ortaya çıkabileceği birçok yer var. Ö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 çakışan saat dilimlerine sahip herhangi bir konum, bu tür bir sorunla karşılaşabilir.
Aşağıdaki tablo, örnek olarak Denver ve Phoenix için mevsime bağlı olarak cihaz davranışını gösterir:
Yer ve sezon | MCC veya NITZ'den alınan bilgiler | Algılanan saat dilimi ve davranış |
---|---|---|
Denver, Colorado Kış mevsimi | Zaman: 1 Ocak 2021 12:00:00 Ülke: ABD Ofset: UTC-7, gün ışığından yararlanma yok | İki bölge kimliği eşleşiyor:
Cihaz doğru şekilde America/Denver'a ayarlanmıştır. |
Phoenix, Arizona Kış mevsimi | Zaman: 1 Ocak 2021 12:00:00 Ülke: ABD Ofset: UTC-7, gün ışığından yararlanma yok | İki bölge kimliği eşleşiyor:
Cihaz yanlış Amerika/Denver olarak ayarlanmış. |
Denver, Colorado Yaz | Zaman: 1 Temmuz 2021 12:00:00 Ülke: ABD Ofset: UTC-6, gün ışığından yararlanma | Bir bölge kimliği aşağıdakilerle eşleşir:
Cihaz doğru şekilde America/Denver'a ayarlanmıştır. |
Phoenix, Arizona Yaz | Zaman: 1 Temmuz 2021 12:00:00 Ülke: ABD Ofset: UTC-7, gün ışığından yararlanma yok | Bir bölge kimliği aşağıdakilerle eşleşir:
Cihaz doğru şekilde America/Phoenix'e ayarlanmıştır. |
Yukarıdaki örnekler kış aylarında Denver veya Arizona'daki Android cihazlarını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 saati gösterir. 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 yaz saatini gözlemlediğinde ve Phoenix bunu yapmadığında, kullanıcının konumu için yanlış saat dilimi kimliğine ayarlandıkları takdirde bazı cihazlar geçici olarak yanlış yerel saati gösterebilir. Bu, cihaz yeni bir NITZ sinyali (özellikle "UTC-7, gün ışığından yararlanma yok" ofset bilgisi içeren bir sinyal) alır almaz düzeltilir, ancak bu biraz zaman alabilir ve taşıyıcılara bağlıdır.
Sonuç olarak, saat dilimi kimliğini kıştan ilkbahara kadar 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üm, telefon saat dilimi algılama özelliğinin hatalarını ayıklamak ve test etmek için kabuk komutlarını açıklar.
Test ortamı kurulumu
Test cihazları, telefonun saat dilimi algılama davranışını kontrol etmek için tipik olarak 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 etkilerini izlemek için kullanılabilir.
Cihazın saat dilimini algılaması için NITZ sinyal bilgisi doğru, MCC ile tutarlı ve cihazın IANA TZDB (zaman dilimi kuralları) kopyasıyla eşleşmelidir. MCC ile tutarsız olan NITZ sinyalleri, telefon kaynağının belirsiz hale gelmesine neden olur.
Örneğin, test hücresi tarafından kullanılan MCC ABD içinse, NITZ sinyali ABD'de herhangi bir yer için doğru olan bir "evrensel saat", ofset ve yaz saati bilgileri içermelidir.
com.android.phone hizmetiyle etkileşim kurma
Aygıtı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 bulunabilen telefon bilgilerini döker. Birden fazla SIM'i olan cihazlarda, her bir SIM telsizi 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")]}