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 konum 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 telefon gerektirmediğinden mobil telefonlara ek olarak çeşitli form faktörlerine sahip cihazlarda da desteklenebilir.

Konum saat dilimini algılama özelliği, AOSP platformundaki aşağıdaki bileşenlerden oluşur:

  • Sistem sunucusunda saat dilimi algılama mantığı
  • Android 12'de kullanıma sunulan ve kullanıcıların telefon ve konum saat dilimi algılama mekanizmaları arasında seçim yapmasını sağlayan, Ayarlar'da kullanıcıların erişebileceği bir seçenek

  • Konum algılama ve saat dilimi eşlemesi yapan bileşenler için bir eklenti sistemi. Bu eklenti, konum saat dilimi sağlayıcısı (LTZP) olarak adlandırılır ve bir cihazda en fazla iki tane olabilir. Platform, LTZP'yi uygulamak için kullanılması gereken sistem API'leri sağlar.

  • Referans LTZP uygulaması.

  • Referans uygulamayla birlikte 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 varsa kullanıcılar konum algoritmasını diledikleri zaman devre dışı bırakabilir.

  • Konumdan türetilen saat dilimi önerileri, 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 üzerinden açıkça izin vermesi gerekmez.

  • Cihaz konum bilgileri Android platform hizmetlerine iletilmez. Bunun yerine aşağıdaki işlemler gerçekleşir:

    • Zaman dilimi algılayıcı hizmetlerine saat dilimi kimlikleri, cihazın konumu tarafından değil, LTZP tarafından gönderilir. Bu, konum saat dilimini 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 karma bir yaklaşımı kullanabilir.

Özellik davranışı

time_zone_detector hizmeti, cihazın mevcut saat diliminin ne zaman değiştirileceğini algılama algoritmalarından aldığı önerilere göre belirler.

location_time_zone_manager hizmeti, time_zone_detector konum algoritması için öneriler oluşturmaktan sorumludur. location_time_zone_manager hizmeti, sistem sunucusu işleminde çalışır.

location_time_zone_manager hizmeti, saat dilimi algılama mantığı içermez. Bu hizmet, bir veya iki LTZ eklentisinin yaşam döngüsünü yönetmekten sorumludur.

Konum saat dilimini algılama gerekli olmadığında 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 Android konum sağlayıcılarından etkin bir şekilde istenebilir ve ek güç tüketebilir.
  • Konum ayarları kullanıcı kapsamlıdır ve Android'in mevcut kullanıcının ayarlarına uyması gerekir.
  • Cihazın konumunu elde etmek gizlilik açısından hassastır.

Ayrıca, geçerli kullanıcı konum bilgilerinin kullanıcılar arasında paylaşılmasını önlemek için ayarları değiştirdiğinde location_time_zone_manager hizmeti, gerekirse belirsiz bir öneride bulunur.

Bu seçimler sonucunda, mevcut algoritma konuma geçirildikten veya mevcut kullanıcı değiştirildikten 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 LTZP 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.
İkincil LTZP
Birincil LTZP, saat diliminin belirsiz olduğunu, kalıcı bir hata bildiriyorsa veya başlatma sırasında zaman aşımı yaşıyorsa ç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 bilgi akışı

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

Cihaz yapılandırma gereksinimleri

Konum saat dilimi özelliğini desteklemek için cihazların, kullanabileceği LTZP'lerle yapılandırılması gerekir. Cihazlarda, konum saat dilimi algılamanın çalışır durumda olması ve Ayarlar'da kullanıcılara gösterilmesi için en az bir LTZP'nin etkinleştirilmesi ve yapılandırılması gerekir.

Cihaz yapılandırması

Bu bölümde, cihaz üreticilerinin cihazları konum saat dilimi algılamayı destekleyecek şekilde nasıl yapılandırabileceği açıklanmaktadır.

Temel AOSP yapılandırması şu adrestedir: 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 etkinleştirilmiş veya yapılandırılmış olmalıdır.

Değerin false olarak ayarlanması, küçük bir hafıza tasarrufu sağlamak için özelliği tamamen devre dışı bırakır.
config_enablePrimaryLocationTimeZoneProvider false Bu, birincil LTZP'yi etkinleştirir.
config_primaryLocationTimeZoneProviderPackageName Bu değeri, birincil sağlayıcı hizmetinin bulunabileceği uygulamanın paket adıyla ayarlayın.
config_enableSecondaryLocationTimeZoneProvider false Bu, ikincil LTZP'yi etkinleştirir.
config_secondaryLocationTimeZoneProviderPackageName Bunu, ikincil sağlayıcı hizmetinin bulunabileceği uygulamanın paket adıyla ayarlayın.

Varsayılan olarak AOSP yapılandırmasında config_enableGeolocationTimeZoneDetection anahtarı true olarak ayarlanır. Bu, konum saat dilimini algılama özelliği için desteği etkinleştirir. AOSP varsayılan olarak LTZP yapılandırması içermediğinden özellik başlangıçta kullanıcılara gösterilmez. 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üne bakın.)

LTZP durum API'leri

Android 14'te LTZP API'leri, LTZP raporlama durumu bilgilerini destekler. Bu sayede LTZP, platform saat dilimi algılama bileşenleri konum algoritmasındaki konum veya saat dilimi algılamayla doğrudan ilgili olmadığından platformun kendi başına algılayamayacağı sorunları bildirebilir.

LTZP'nin davranışının cihazın ortamı tarafından düşürüldüğünü bildirme özelliği, telefon yedek modu desteklendiğinde kullanışlıdır. Örneğin, konum algılamasının çalışması için özel ayarlara veya izinlere ihtiyaç duyan bir üçüncü taraf LTZP, düşük kaliteli bir modda çalışıyorsa ya da mevcut cihaz ayarları tarafından devre dışı bırakılmışsa bu durum bilgilerini reportSuggestion yöntemi aracılığıyla Ayarlar uygulaması gibi dahili platform bileşenlerine bildirebilir. Ardından Ayarlar uygulaması, özelleştirilebilir dizeler veya özelleştirmeler aracılığıyla kullanıcıları konum algoritmasının iyi çalışması veya çalışması için değiştirilmesi gereken ayarlar olduğu konusunda bilgilendirebilir.

LTZP'nin bildirebileceği durumlar hakkında daha fazla bilgi için TimeZoneProviderStatus bölümüne bakın.

LTZP yapılandırması ve dağıtımı

LTZP'yi yapılandırırken frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java için kaynak kodundaki talimatları okuyun. Javadoc yorumları; hizmet, gerekli izinler ve diğer yapılandırmalarla ilgili ayrıntılar sağlar.

Cihaz üreticilerinin, LTZP'yi yapılandırmak için LTZP hizmetini barındıracak bir uygulama işlemi seçmesi gerekir. LTZP için özel bir işleme sahip olmak yüksek bir yükü beraberinde getirir. İdeal olarak, seçilen uygulama işlemi, sistem sunucusu gibi her zaman çalışan bir işlem olmalıdır.

Modüler sistem bileşenleri (modüller) bulunan cihazlarda, LTZP tarafından kullanılan coğrafi veriler ile Saat Dilimi Verileri modülü (com.android.tzdata) tarafından taşınan saat dilimi kuralları (tzdb) arasındaki etkileşimi göz önünde bulundurun. Birinde güncelleme yapılırken diğerinde güncelleme yapılmaması, sürüm uyuşmazlığı sorunlarına neden olabilir. Daha fazla bilgi için Özellik kullanıma sunma ile ilgili 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 ve konumu bir saat dilimi kimliği grubuyla eşlemek için cihaz üzerinde bir veri dosyası kullanır.

Diğer açık kaynak projelerinden türetilen bir referans veri kümesi kaynak koda dahil edilir. Daha fazla bilgi için README.md dosyasını ve çeşitli LICENSE dosyalarını inceleyin.

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

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

location_time_zone_manager'ün mevcut durumunu dökmek için şunları kullanın:

adb shell cmd location_time_zone_manager dump

Teste yardımcı olacak kapsamlı bir komut satırı seçenekleri grubunu görmek için şunları kullanın:

adb shell cmd location_time_zone_manager help

Yardım çıkışında, test veya üretim için time_zone_detector'ın davranışını etkilemek üzere kullanılabilecek device_config 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, sistem sunucusu işlemine kaydedildiğinde AOSP referans LTZP'sinde hata ayıklama yapmak için aşağıdaki komutu kullanabilirsiniz:

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