Android Automotive OS'te yaklaşık konum

Uygulama geliştiricilerin, kullanıcı gizliliğine saygı duymak için yalnızca kaba konum izinleri istemeleri önerilir. Yaklaşık genel konum bilgisine ihtiyaç duyan uygulamalar, hızlı olması ve daha az güç tüketmesi nedeniyle genellikle birleştirilmiş ağ konumunu (FLP) kullanır. Android tabanlı mobil cihazlara kıyasla, otomotiv uygulamalarında ağ konumunu belirlemek daha zor olabilir. İki Android API'si kullanabilirsiniz:

  • LocationManager API, tercih edilen konum sağlayıcıyı açıkça tanımlamak için requestLocationUpdates kullanmanızı gerektirir.

  • Google Play Hizmetleri API'si, FusedLocationProviderClient'de konumla çalışmak için daha basit bir yol sunar.

Birçok otomotiv uygulaması, LocationManager yerine Google Play Hizmetleri API'sindeki FLP'yi kullanır. FLP, aracın ihtiyaç duyduğu konum isteği ölçütlerine ve politikalara (güç ve doğruluk) göre en uygun konum sağlayıcıyı seçer.

Bunun yerine, android.permission.ACCESS_FINE_LOCATION izinlerini kullanan hassas konumlar için NETWORK_PROVIDER ve GPS_PROVIDER'ı açıkça isteyip kullanmayı tercih edebilirsiniz. Android 12 (API düzeyi 31) ve sonraki sürümlerde, daha önce yalnızca Google Play Hizmetleri API'si aracılığıyla erişilebilen FUSED_PROVIDER, LocationManager için konum sağlayıcı olarak kullanılabilir. FLP'nin FusedLocationProvider.java'deki uygulamasını görebilirsiniz.

GPS_PROVIDER'yı yalnızca kaba izin haklarıyla kullanmak mümkün olsa da (çerçeve, beklentilerle uyumlu olması için doğruluğu yapay olarak düşürür) genel kullanılabilirlik düşük olduğundan ve kaba konum elde etmek genellikle daha yavaş olduğundan Android telefonları hedefleyen geliştiriciler için bu pek mantıklı değildir.

Otomotivde ağ konumu

Android telefonlarda (Google Mobil Hizmetleri ile) kullanılan NETWORK_PROVIDER, konumu yakındaki baz istasyonlarına, kablosuz ağ erişim noktalarına ve Bluetooth (BT) işaretçilerine göre belirler. Bu nedenle, NETWORK_PROVIDER için veri bağlantısı gerekebilir.

Otomotiv uygulamalarında cihaz kısıtlamaları farklıdır. Küresel navigasyon uydu sistemi (GNSS) genellikle açık olduğundan, güç ve pil kullanımının artması nedeniyle herhangi bir ceza uygulanmaz. Bu sayede IVI çalışma süresi etkilenmez. Sunucularımızla değiştirilen verileri en aza indirmek için çaba gösteririz.

Bu nedenle birçok uygulama, LocationManager yerine Play API'deki FLP'yi kullanır. Çünkü FLP, konum isteği ölçütlerini/politikalarını (yani güç ve doğruluk) en iyi şekilde karşılayabilen konum sağlayıcıyı kullanarak otomatik olarak akıllıca davranır.

Mobil cihazların aksine araçlar nadiren bir yerden diğerine atlıyor gibi görünür. Aracın konumu çoğu zaman arka planda bilinir.

Ağ konumu sağlayıcısı (NLP)

Çoğu araç, Hücre Kimliği (ve sinyal gücü) hakkında gerekli bilgileri almak için gerekli telefon API'lerini kullanmaz. Sonuç olarak ve veri kullanımını en aza indirdiğimiz için NLP'nin ek işlevsel uygulaması sağlanmaz.

Fused location provider

Mobil FLP, ağ ve GPS sağlayıcıları uygun şekilde kullanmanın yanı sıra konumların kalitesini daha da artırmak için diğer sensörlerden gelen bilgileri birleştirir. Diğer yandan, Automotive'in FLP'sinin mevcut uygulaması, yukarıda bahsedilen varsayımlardan yararlanır ve her zaman temel kaynak olarak GPS_PROVIDER kullanır. GNSS'den gelen konumları değiştirerek gerektiğinde daha fazla hata ekler. Örneğin, bir istemciye kaba konumlar sağlandığında.

Bu nedenle, çok nadir durumlarda ilk konumun kullanılabilir olması normalden daha uzun sürebilir. Örneğin, bir araç veya daha doğrusu konum alt sistemi ilk kez kullanıldığında ya da araç çekildikten sonra.

Mobil ve otomotiv kullanımlarını hedefleyen uygulamalar tasarlama

Daha yüksek bir kesinlik kalitesi gerektirmeyen mobil ve otomotiv cihazlarını hedefleyen uygulamalar için android.permission.ACCESS_COARSE_LOCATION yalnızca isteğinde bulunun ve kullanılabilir olduğunda FLP'ye geri dönün. Alternatif olarak, aynı izinlerle doğrudan GPS_PROVIDER kullanın. Çerçeve, API beklentileriyle uyumlu olması için temel GNSS konumunun hassasiyetini düşürür. Daha fazla bilgi için Konum izinleri isteme bölümündeki Doğruluk konusuna bakın.

Ayrıca bu uygulamalar, manifest dosyalarında android.hardware.location.network özelliğini isteğe bağlı olarak açıkça belirtmelidir. Örneğin:

<uses-feature android:name="android.hardware.location.network" android:required="false" />

Bu yaklaşım, farklı form faktörlerindeki cihazlarla daha fazla uyumluluk elde etmeye yardımcı olur. Bu nedenle, gerektiğinde konum almak için kod farklılıkları olmadan maksimum uygulama kullanılabilirliği sağlar.