Android 12 ve sonraki sürümlerde kullanılabilen konum saat dilimini algılama, cihazların saat dilimini belirlemek için konumlarını ve saat dilimi haritası verilerini kullanmasına olanak tanıyan isteğe bağlı bir otomatik saat dilimi algılama özelliğidir.
Konum saat dilimini algılama, telefon saat dilimini algılamaya alternatif bir mekanizmadır. Bu özellik için telefon görüşmesi gerekmediğinden, mobil telefon görüşmesi cihazlarının yanı sıra çeşitli form faktörlerine sahip cihazlarda da desteklenebilir.
Konum saat dilimini algılama özelliği, AOSP platformunda aşağıdaki bileşenlerden oluşur:
- Sistem sunucusundaki saat dilimi algılama mantığı
Android 12'de kullanıma sunulan ve kullanıcılara telefon ve konum saat dilimi algılama mekanizmaları arasında seçim yapma olanağı tanıyan, Ayarlar'da kullanıcı tarafından erişilebilen bir seçenek
Konum algılama ve saat dilimi eşleme işlemlerini gerçekleştiren bileşenler için bir eklenti sistemi. Eklentiye Konum Saat Dilimi Sağlayıcısı (LTZP) adı verilir ve bir cihazda en fazla iki tane bulunabilir. Platform, LTZP'yi uygulamak için kullanılması gereken sistem API'leri sağlar.
Referans bir LTZP uygulaması.
Referans uygulamayla kullanılabilecek Open Street Map (OSM) verilerinden referans veri kümesi oluşturmak için barındırma araçları.
Kullanıcı gizliliği
Konum saat dilimini algılama aşağıdaki kullanıcı gizliliği özelliklerini içerir:
Konum algoritmasını seçmek için bir açma/kapatma düğmesi olduğunda kullanıcılar konum algoritmasını diledikleri zaman kapatabilir.
Konumdan türetilen saat dilimi önerileri, bir cihazdaki kullanıcılar arasında paylaşılmaz.
Kullanıcılar, saat dilimi algılama için konum algılamayı Tarih ve Saat ayarları ekranından açıkça kontrol edebilir. Kullanıcıların izin iletişim kutusu aracılığıyla açıkça izin vermesi gerekmez.
Cihaz konumu bilgileri Android platform hizmetlerine aktarılmaz. Bunun yerine aşağıdaki işlemler gerçekleşir:
- Zaman dilimi algılayıcı hizmetlerine, cihazın konumu değil LTZP tarafından saat dilimi kimlikleri gönderilir. Bu, konum saat dilimi algılamayı desteklemek için gereken minimum API'dir.
- Sistem entegratörleri, her bir LTZP'nin çalışmasını kontrol eder. LTZP uygulamaları, tamamen Android destekli cihazda tutulan saat dilimi harita verilerini, sunucuları veya hibrit bir yaklaşımı kullanabilir.
Özellik davranışı
time_zone_detector hizmeti, algılama algoritmalarından aldığı önerilere göre cihazın mevcut saat diliminin ne zaman değiştirileceğini belirler.
location_time_zone_manager hizmeti, time_zone_detector konum algoritması için öneriler oluşturmaktan sorumludur. location_time_zone_manager hizmeti, sistem sunucusu sürecinde çalışır.
location_time_zone_manager hizmeti, saat dilimi algılama mantığı içermez. Bu hizmet, bir veya iki LTZP eklentisinin yaşam döngüsünü yönetmekten sorumludur.
Konum saat dilimini algılama gerekmediğinde LTZP'ler başlatılmaz. Bu, konum saat dilimini algılama sisteminin, açıkça gerekli olmadığı sürece LTZP'lerden cihazın konumunu izlemelerini istemediği anlamına gelir. Bu davranışın bazı nedenleri şunlardır:
- Normal telefon görüşmesi işlemleri kapsamında pasif olarak alınan telefon görüşmesi sinyallerinin aksine, konum Android konum sağlayıcılarından aktif olarak istenebilir ve ek güç tüketebilir.
- Konum ayarları kullanıcı kapsamlıdır ve Android, mevcut kullanıcının ayarlarını dikkate almalıdır.
- Cihazın konumunu almak gizlilik açısından hassastır.
Ayrıca, location_time_zone_manager hizmeti, mevcut kullanıcı ayarları değiştirerek kullanıcılar arasında konum bilgilerinin paylaşılmasını önlemek istediğinde (gerekirse) belirsiz bir öneride bulunur.
Bu seçimler sonucunda, geçerli algoritmayı konuma veya geçerli kullanıcıyı değiştirdikten sonra saat diliminin algılanması birkaç saniye sürer. Bu durum, kullanılan LTZP'lerin uygulamalarına da bağlıdır.
AOSP konum saat dilimini algılama uygulaması, burada tanımlandığı gibi birincil ve ikincil olmak üzere en fazla iki LTZP'ye izin verir:
- Birincil LTZP
- Kullanıcı, konum saat dilimini algılama özelliğinin çalışmasına izin verdiğinde her zaman çalışır.
- İkincil LTZP
- Birincil LTZP, saat diliminin belirsiz olduğunu bildirirse, kalıcı bir hata bildirirse veya başlatma sırasında zaman aşımına uğrarsa çalışır. Birincil LTZP belirli bir öneri gönderirse durdurulur.
Şekil 1'de gösterildiği gibi, time_zone_detector hizmeti telefon veya konum algoritmasından saat dilimi önerileri alır. Konum algoritması, birincil veya ikincil LTZP'den öneriler alır.
Şekil 1. Konum saat dilimini algılama bilgi akışı.
Cihaz yapılandırma gereksinimleri
Konum saat dilimi özelliğinin desteklenmesi için cihazların, kullanabileceği LTZP'lerle yapılandırılması gerekir. Konum saat dilimi algılamanın çalışır durumda olması ve Ayarlar'da kullanıcılara görünür olması için cihazlarda en az bir LTZP'nin etkinleştirilip yapılandırılması gerekir.
Cihaz yapılandırması
Bu bölümde, cihaz üreticilerinin konum saat dilimini algılama özelliğini destekleyecek şekilde cihazları nasıl yapılandırabileceği açıklanmaktadır.
Temel AOSP yapılandırması frameworks/base/core/res/res/values/config.xml konumundadır:
| Yapılandırma anahtarı | AOSP değeri | Açıklama |
|---|---|---|
config_enableGeolocationTimeZoneDetection |
true |
Bu, konum saat dilimini algılama özelliğinin ana kontrolüdür.
Bu özellik, AOSP'de varsayılan olarak desteklenir. Özelliğin kullanıcılara sunulabilmesi için en az bir LTZP'nin etkinleştirilmesi veya yapılandırılması gerekir. Değeri false olarak ayarlamak, küçük bir bellek tasarrufu için özelliği tamamen devre dışı bırakır. |
config_enablePrimaryLocationTimeZoneProvider |
false |
Bu, birincil LTZP'yi etkinleştirir. |
config_primaryLocationTimeZoneProviderPackageName |
Bunu, birincil sağlayıcı hizmetinin bulunduğu uygulamanın paket adı olarak ayarlayın. | |
config_enableSecondaryLocationTimeZoneProvider |
false |
Bu, ikincil LTZP'yi etkinleştirir. |
config_secondaryLocationTimeZoneProviderPackageName |
Bunu, ikincil sağlayıcı hizmetinin bulunduğu uygulamanın paket adı olarak ayarlayın. |
Varsayılan olarak, AOSP yapılandırmasında config_enableGeolocationTimeZoneDetection anahtarı true olarak ayarlanır ve konum saat dilimini algılama özelliği desteklenir. AOSP'de varsayılan olarak bir LTZP yapılandırması bulunmadığından bu özellik başlangıçta kullanıcılara görünmez.
Ancak cihaz üreticileri, bu varsayılan yapılandırmayı kullanarak test için komut satırından LTZP'leri etkinleştirebilir ve simüle edebilir. (Daha fazla bilgi için Hata ayıklama ve test etme bölümünü inceleyin.)
LTZP durumu API'leri
Android 14'te LTZP API'leri, LTZP raporlama durumu bilgilerini destekler. Bu sayede LTZP, platformun kendi başına algılayamayabileceği sorunları bildirebilir. Bunun nedeni, platformun saat dilimi algılama bileşenlerinin konum algoritmasındaki konum veya saat dilimi algılamaya doğrudan dahil olmamasıdır.
LTZP'nin davranışının cihazın ortamından olumsuz etkilendiğini bildirme özelliği, telefon ağları için yedek mod desteklendiğinde kullanışlıdır. Örneğin, konum algılamasının çalışması için özel ayarlara veya izinlere dayanan bir üçüncü taraf LTZP, mevcut cihaz ayarları tarafından devre dışı bırakılmışsa veya işlevselliği azaltılmış bir modda çalışıyorsa LTZP, bu durum bilgilerini reportSuggestion yöntemiyle Ayarlar uygulaması gibi dahili platform bileşenlerine bildirebilir. Ayarlar uygulaması, konum algoritmasının iyi veya hiç çalışmaması için değiştirilmesi gereken ayarlar olduğunu özelleştirilebilir dizeler ya da özelleştirmeler aracılığıyla kullanıcılara bildirebilir.
LTZP'nin bildirebileceği durumlar hakkında daha fazla bilgi için TimeZoneProviderStatus kodunu inceleyin.
LTZP yapılandırması ve dağıtımı
LTZP'yi yapılandırırken frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java kaynak kodundaki talimatları okuyun.
Javadoc yorumları, hizmet, gereken izinler ve diğer yapılandırmalar hakkında ayrıntılı bilgi sağlar.
Cihaz üreticileri, LTZP'yi yapılandırmak için LTZP'nin hizmetini barındıracak bir uygulama süreci seçmelidir. Uzun süreli işlem için özel bir süreç oluşturmak fazla bir ek yüktür. İdeal olarak, seçilen uygulama süreci her zaman çalışan bir süreç olmalıdır (ör. sistem sunucusu).
Modüler sistem bileşenlerine (modüller) sahip cihazlarda, LTZP tarafından kullanılan coğrafi veriler ile Saat Dilimi Verileri modülünde (com.android.tzdata) taşınan saat dilimi kuralları (tzdb) arasındaki etkileşimi göz önünde bulundurun. Birinde yapılan güncellemeler diğerinde yapılmazsa sürüm çarpıklığı sorunları yaşanabilir. Daha fazla bilgi için Özellikleri kullanmaya başlarken dikkat edilmesi gerekenler başlıklı makaleyi inceleyin.
AOSP referans LTZP
AOSP, packages/modules/GeoTZ altında referans bir LTZP uygulaması içerir. Bu referans uygulama, cihazın konumunu belirlemek için AOSP API'lerini kullanır ve konumu bir dizi saat dilimi kimliğiyle eşlemek için cihaz üzerinde bir veri dosyası kullanır.
Kaynak koduna, diğer açık kaynak projelerinden elde edilen bir referans veri kümesi dahildir. Daha fazla bilgi için README.md ve çeşitli LICENSE dosyalarına bakın.
Hata ayıklama ve test etme
Aşağıdaki bölümde, konum saat dilimini algılama özelliğinde hata ayıklama ve test için kullanılan kabuk komutları açıklanmaktadır.
location_time_zone_manager hizmetiyle etkileşim kurma
Android 12 ve sonraki sürümleri çalıştıran bir cihazda konum algoritması desteklendiğinde Android, başlatma sırasında location_time_zone_manager hizmetini başlatır.
location_time_zone_manager öğesinin mevcut durumunu boşaltmak için şunu kullanın:
adb shell cmd location_time_zone_manager dumpTest etmeye yardımcı olacak kapsamlı bir komut satırı seçenekleri kümesi görmek için şunu kullanın:
adb shell cmd location_time_zone_manager helpYardım çıktısında, test veya üretim için device_config davranışını etkilemek üzere kullanılabilecek time_zone_detector hizmet özellikleri de açıklanır. Daha fazla bilgi için device_config hizmetini kullanarak cihaz yapılandırma bölümünü inceleyin.
LTZP uygulamaları kendi hata ayıklama veya test desteğini sağlayabilir. Örneğin, AOSP referans LTZP'yi sistem sunucusu işlemine kaydettiğinizde hata ayıklamak için aşağıdaki komutu kullanabilirsiniz:
adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService