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 dilimi 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 uygulamak için kullanılması gereken sistem API'leri sağlar.

  • Referans LTZP uygulaması.

  • Open Street Map (OSM) verilerinden referans uygulama ile kullanılabilecek bir referans veri kümesi oluşturmak için ana makine araçları.

Kullanıcı gizliliği

Konum saat dilimi algılama özelliği 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, mevcut kullanıcının ayarlarına uymalıdır.
  • 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, geçerli algoritmanın konuma geçirildikten sonra veya geçerli kullanıcı değiştirildikten sonra saat diliminin algılanması birkaç saniye sürer. Bu, 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 bildirdiğini veya başlatma sırasında zaman aşımı yaşadığını bildirirse çalışır. Birincil LTZP belirli bir öneri gönderirse durur.

Ş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 desteklenmektedir. Ö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 bellek tasarrufu 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 dilimi 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ö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üne bakın.)

LTZP durumu 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ılayamayabileceği 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. Daha sonra Ayarlar uygulaması, özelleştirilebilir dizeler veya özelleştirmeler aracılığıyla kullanıcılara konum algoritmasının iyi veya hiç çalışması için değiştirilmesi gereken ayarların olduğunu bildirebilir.

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ırmalar hakkında ayrıntılı bilgi 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şenlerine (modüllere) 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 güncelleme olmadan sürüm sapma sorunlarına neden olabilir. Daha fazla bilgi için Özellik benimsemeyle ilgili dikkat edilmesi gereken noktalar bölümüne bakın.

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 projelerden türetilen bir referans veri kümesi kaynak koduna eklenir. 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, hata ayıklamak ve konum saat dilimi algılama özelliğini test etmek 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 öğesinin mevcut durumunu döküm almak için şunu 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 kayıtlı AOSP referansı LTZP hatasını ayıklamak için aşağıdaki komutu kullanabilirsiniz:

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