Konum saat dilimini algılama

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ının Ayarlar'dan erişebileceği bir seçenek. Bu seçenek, kullanıcıların telefon ve konum saat dilimi algılama mekanizmaları arasında seçim yapmasına olanak tanır.

  • 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'nin uygulanması 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 devre dışı bırakabilir.

  • 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 zaman 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 cihazda tutulan saat dilimi haritası 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 öneri 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 dilimi 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 işlemleri kapsamında pasif olarak alınan telefon sinyallerinin aksine, konum bilgisi 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ına uymalı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 dilimi algılama özelliğinin çalışmasına izin verdiğinde her zaman çalışır.
ikincil LTZP
Birincil LTZP, saat diliminin belirsiz olduğunu bildirirse, kalıcı bir arıza 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.

Konum saat dilimini algılama bilgilerinin akışı

1.şekil Konum saat dilimini algılama bilgi akışı.

Cihaz yapılandırma gereksinimleri

Konum saat dilimi özelliğinin desteklenmesi için cihazların, cihazı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 dilimi algılamayı destekleyecek şekilde cihazları nasıl yapılandırabileceği açıklanmaktadır.

Temel AOSP yapılandırması şu konumdadır: frameworks/base/core/res/res/values/config.xml:

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, özelliği tamamen devre dışı bırakır ve küçük bir bellek tasarrufu sağlar.
config_enablePrimaryLocationTimeZoneProvider false Bu, birincil LTZP'yi etkinleştirir.
config_primaryLocationTimeZoneProviderPackageName Bu değeri, 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 Bu değeri, 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 başlıklı makaleyi inceleyin.)

LTZP durum 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 görüşmesi 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 başlıklı makaleyi 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 yüksek 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ına neden olabilir. 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 uygulaması, 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 kodla birlikte, diğer açık kaynak projelerden elde edilen bir referans veri kümesi de bulunur. 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 dilimi 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

Konum algoritması, Android 12 ve sonraki sürümleri çalıştıran bir cihazda desteklendiğinde Android, location_time_zone_manager hizmetini başlatma sırasında oluşturur.

location_time_zone_manager öğesinin mevcut durumunu boşaltmak için şunu kullanın:

adb shell cmd location_time_zone_manager dump

Teste 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 help

Yardı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 başlıklı makaleyi inceleyin.

LTZP uygulamaları kendi hata ayıklama veya test desteğini sağlayabilir. Örneğin, AOSP referans LTZP'sini sistem sunucusu işlemine kaydedildiğinde hata ayıklamak için aşağıdaki komutu kullanabilirsiniz:

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService