Park edilmiş uygulamanıza Android Automotive OS desteği ekleme

Uygulamanızı Android Automotive OS cihazlarda dağıtırken form faktörüne özgü bazı hususları göz önünde bulundurmanız gerekir. Bu kılavuzda bu hususlar açıklanmaktadır.

Mevcut uygulamanızı Android Automotive OS emülatöründe test etme

Android Automotive OS için uygulamanızı oluşturmaya başlamadan önce mevcut uygulamanızı Android Automotive OS emülatöründe test edin. Bir emülatör ayarlamak için Android Automotive OS emülatörünü kullanarak test etme bölümündeki adımları uygulayın. Ardından, Uygulamanızı emülatörde çalıştırma bölümündeki talimatları uygulayarak uygulamayı çalıştırabilirsiniz.

Uygulamanızı çalıştırırken aşağıdaki gibi uyumluluk sorunlarına dikkat edin:

  • Bilgi-eğlence ekranlarının yönü sabittir. Uygulamaların araba uygulaması kalite yönergelerine uyması için hem dikey hem de yatay yönleri desteklemesi gerekir.
  • Diğer cihazlarda kullanılabilen API'ler Android Automotive OS'te kullanılamayabilir. Örneğin, bazı Google Play Hizmetleri API'leri Android Automotive OS'te kullanılamaz. Bu sorunları nasıl ele alacağınızla ilgili ayrıntılar için Özellikleri devre dışı bırakma bölümüne bakın.

Uygulamanızın manifest dosyasını yapılandırma

Android Automotive OS cihazlarını hedeflemek için uygulamanızda belirli manifest girişleri bulunmalıdır. Android Automotive OS cihazlarında dağıtımı etkinleştirdikten sonra Google Play, uyumlu uygulamaları inceler ve arabada güvenli bir şekilde kullanılabileceklerinden emin olmanıza yardımcı olur. Daha fazla bilgi için Arabalara dağıtma başlıklı makaleyi inceleyin.

Gerekli Android Automotive OS özellikleri

Android Automotive OS için oluşturulan tüm uygulamaların Google Play üzerinden dağıtılabilmesi için belirli koşulları karşılaması gerekir. Daha fazla bilgi için Google Play özellikleriyle ilgili koşulları karşılama başlıklı makaleyi inceleyin.

Kategoriye özgü manifest girişleri

Park edilmiş tüm uygulamalar için geçerli olan yukarıdaki şartlara ek olarak, video ve oyun kategorilerinde ek şartlar da geçerlidir:

Sürücünün dikkatinin dağılmasıyla ilgili koşulları karşılama

Uygulamanızı arabalara getirirken sürücünün dikkatini dağıtmamak çok önemlidir. Park edilmiş uygulamalar için bu durum, DD-2 ve DD-3 kalite yönergelerinde belirtildiği gibi, kullanıcı deneyimi (UX) kısıtlamaları etkin durumdayken uygulamanızın kullanılmasını veya ses çalmasını engelleyerek sağlanır.

Kullanıcı deneyimi kısıtlamaları etkin durumdayken kullanımı engelleme

Varsayılan olarak, kullanıcı deneyimi kısıtlamaları etkin durumdayken etkinlikler kullanılamaz veya başlatılamaz. Bu davranışın uygulamanız için geçerli olmasını sağlamak istiyorsanız uygulamanızın manifest dosyasındaki herhangi bir <activity> öğesinde aşağıdaki <meta-data> öğesi bulunmamalıdır:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Uygulamanızdaki bir etkinlik, kullanıcı deneyimi kısıtlamaları etkinleştiğinde devam ettirilirse işletim sistemine ait bir etkinlik tarafından gizlenir.

Uygulamanızın etkinliği en azından Duraklatıldı yaşam döngüsü durumuna geçmelidir. Bu, onPause yaşam döngüsü geri çağırması olarak gerçekleşir. Bu sırada, uygulamanızdaki video ve ses oynatmayı duraklatmanız gerekir.

Android Automotive OS uyumluluk modu bulunan cihazlarda, sistem engellemesi, uygulamanızın etkinliklerinin Duraklatıldı durumundan Durduruldu durumuna geçmesine neden olur.

Oynatmayı durdurma ve oynatmanın devam etmesini engelleme

Bazı uygulamalarda, onPause() sırasında oynatmayı duraklatmak ve onResume() tarihine kadar oynatmanın devam etmesini engellemek için durumu izlemek, sürücünün dikkatini dağıtmayla ilgili şartları karşılamak için yeterlidir.

Uygulamanız için yaşam döngüsü geri çağırmalarına yanıt vermek yeterli değilse aşağıdaki bölümde açıklandığı gibi doğrudan kullanıcı deneyimi kısıtlama durumunu dinleyebilirsiniz. Örneğin, pencere içinde pencere özelliğini destekleyen uygulamalar, yaşam döngüsü geri çağırmalarında koşullu kontroller yapmak yerine doğrudan dinlemeyi tercih edebilir.

Kullanıcı deneyimi kısıtlamaları

Kullanıcı deneyimi kısıtlamalarını dinlemek için önce uygulama modülünüzün build.gradle dosyasına android.car kitaplığına bağımlılık ekleyin. Bu, Android Automotive OS'e özgü API'ler sağlayan Android SDK'nın bir uzantısıdır.

android {
    ...
    useLibrary("android.car")
}

Kullanıcı deneyimi kısıtlama durumunu okumak için CarUxRestrictionsManager kullanın. Kullanıcı deneyimi kısıtlamaları bir araçtaki ekranlar arasında farklılık gösterebileceğinden, kullanıcı deneyimi kısıtlama durumunu vites veya hız gibi diğer donanım durumlarından belirlemeye çalışmayın.

val car = Car.createCar(context) ?: return
val carUxRestrictionsManager =
    car.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE) as? CarUxRestrictionsManager ?: return

// You can either read the state directly ...
val currentUxRestrictions = carUxRestrictionsManager.currentCarUxRestrictions

// or listen to state changes
carUxRestrictionsManager.registerListener { carUxRestrictions: CarUxRestrictions ->
    // Handle UX restrictions
}

// Don't forget to teardown and release resources when they're no longer needed
carUxRestrictionsManager.unregisterListener()
car.disconnect()

Uygulamanızın CarUxRestrictions tarafından sağlanan tek değer, isRequiresDistractionOptimization işlevinin döndürdüğü değerdir. Diğer değerler yalnızca dikkat dağıtma unsuru olarak işaretlenen etkinlikler için geçerlidir.

Uygulamanızı test etme

Aşağıdaki prosedürü kullanarak uygulamanızın sürücünün dikkatini dağıtan unsurlarla ilgili koşulları karşıladığını doğrulayın:

  1. Uygulamanızı Google Play Store veya uyumluluk modu olmadan sistem görüntüsüne yükleyin.
  2. Başlatıcı uygulama tablosu açıkken sürüşü simüle edin ve uygulamanızın açılamadığını doğrulayın.
  3. Sürüş simülasyonunu durdurun, uygulamanızı oynatma ekranında açın ve oynatmaya başlayın.
  4. Sürüşü tekrar simüle edin ve oynatmanın durakladığını doğrulayın.
    1. Uygulamanız MediaSession ile entegrasyonu destekliyorsa adb shell cmd media_session dispatch play kullanın ve oynatmanın devam etmediğini doğrulayın.

Uygulamanızı Android Automotive OS için optimize etme

Android Automotive OS için uygulamanızı oluştururken kullanıcılarınıza arabalarda mümkün olan en iyi deneyimi sunmak için aşağıdakileri göz önünde bulundurun:

Pencere iç kısımları ve ekran kesikleriyle çalışma

Diğer form faktörlerinde olduğu gibi Android Automotive OS de durum ve gezinme çubukları gibi sistem kullanıcı arayüzü öğeleri içerir ve dikdörtgen olmayan ekranları destekler.

Uygulamalar varsayılan olarak sistem çubuklarıyla veya ekran kesikleriyle çakışmayan bir alanda çizim yapar. Ancak uygulamanızın sistem çubuklarını gizlemesini, arkalarında içerik çizmesini veya Lay out your app within window insets başlıklı makalede açıklandığı gibi içerikleri ekran kesiminde göstermesini isteyebilirsiniz. Uygulamanız bunlardan herhangi birini yapıyorsa uygulamanızın Android Automotive OS cihaz ekosisteminde iyi çalışmasını sağlamayla ilgili ayrıntılar için aşağıdaki alt bölümlere bakın.

Sistem çubukları, yoğun içerik modu ve uçtan uca oluşturma

Arabaların sistem çubukları, diğer form faktörlerine göre farklı boyutlandırılıp konumlandırılabilir. Örneğin, gezinme çubukları ekranın sol, sağ veya alt kısmında yer alabilir. Üstte durum çubuğu, altta gezinme çubuğu olsa bile (çoğu telefon ve tablette olduğu gibi) bu öğelerin boyutu arabalarda muhtemelen çok daha büyük olacaktır.

Ayrıca Android Automotive OS, OEM'lerin uygulamaların tam ekran moduna girmek ve bu moddan çıkmak için sistem çubuklarını gösterip göstermeyeceğini kontrol etmesine olanak tanır. Örneğin, uygulamaların sistem çubuklarını gizlemesini engelleyerek OEM'ler, iklim kontrolü gibi araç kontrollerine ekranda her zaman erişilebilmesini sağlayabilir. Bir OEM, uygulamaların sistem çubuklarını kontrol etmesini engellediyse bir uygulama, sistem çubuklarını göstermek veya gizlemek için WindowInsetsController (veya WindowInsetsControllerCompat) API'lerini çağırdığında hiçbir şey olmaz. Uygulamanızın yerleştirmeleri değiştirip değiştirmediğini tespit etme hakkında daha fazla bilgi edinmek için show ve hide dokümanlarına bakın.

Benzer şekilde, OEM'ler de sistem çubuklarının ve bu çubuklarda bulunan öğelerin her zaman net bir şekilde görünmesini sağlamak için uygulamaların sistem çubuklarının rengini ve yarı saydamlığını ayarlayıp ayarlayamayacağını kontrol edebilir. Uygulamanız uçtan uca çizim yapıyorsa yalnızca kritik olmayan içeriklerin sistem çubuklarının arkasında çizildiğini kontrol edin. Cihaz OEM'si çubukların renginin veya yarı saydamlığının ayarlanmasını engelliyorsa bu içerik görünmeyebilir.

<!-- Depending on OEM configuration, these style declarations
     (and the corresponding runtime calls) may be ignored -->
<style name="...">
  <item name="android:statusBarColor">...</item>
  <item name="android:navigationBarColor">...</item>
  <item name="android:windowTranslucentStatus">...</item>
  <item name="android:windowTranslucentNavigation">...</status>
</style>

Uygulamanız uçtan uca ise sistem çubuklarının boyutu, sayısı, türü veya konumu hakkında varsayımlarda bulunmayın. Bunun yerine, uygulamanızın içeriğini sistem çubuklarına göre yerleştirmek için pencere ekleri API'lerini kullanın. Bu API'lerin nasıl kullanılacağı hakkında daha fazla bilgi için Uygulamanızda içeriği uçtan uca görüntüleme başlıklı makaleyi inceleyin. Sabit kodlanmış dolgu değerleri hiçbir form faktörü için önerilmez ancak arabalarda içeriğin güvenli alanda kalmasını sağlamaz.

Düzensiz şekilli ekranlara uyum sağlama

Dikdörtgen ekranların yanı sıra bazı araçlarda Şekil 1'de gösterildiği gibi düzensiz şekilli ekranlar da olabilir:

Sağ tarafı kavisli bir ekrana sahip Android Automotive OS cihaz.
Şekil 1: Sağ tarafı kavisli bir ekrana sahip Android Automotive OS cihaz. Yeşil alan, eğrinin ekran kesiminin sınırlayıcı kutusuyla çakışmayan güvenli dikdörtgendir.

Uygulamanız uçtan uca oluşturulmuyorsa güvenli alan içinde oluşturulması için herhangi bir işlem yapmanız gerekmez.

Uygulamanız uçtan uca oluşturuluyorsa ekran kesikleriyle ilgili olarak nasıl davranmasını istediğinizi seçebilirsiniz. Bunu, uygulamanızın teması için android:windowLayoutInDisplayCutoutMode özelliğini ayarlayarak kaynakları kullanarak veya çalışma zamanında pencerenin layoutInDisplayCutoutMode özelliğini değiştirerek yapabilirsiniz.

Android Automotive OS cihazlarda bulunan ekran kesikleri, mobil cihazlardakilerden farklı olduğundan LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT veya LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES simgelerini kullanmayın. Bu simgelerin davranışı, mobil cihazlardaki kesiklere göre optimize edilmiştir. Bunun yerine, kesik alanı her zaman girmekten veya her zaman girmemekten kaçınmak için LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER ya da LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS kullanın. İkincisini seçtiğinizde, ekran kesikleriyle ilgili API'ler hakkında daha fazla bilgi için Ekran kesiklerini destekleme başlıklı makaleyi inceleyin.

Uygulamanız ekran kesme alanında oluşturuluyorsa ve Android Automotive OS ile mobil arasında farklı davranışlar sergilemesini istiyorsanız uygulamanız bu davranışı çalışma zamanında ayarlıyorsa Özellikleri devre dışı bırakma, kaynak dosyalarını kullanarak ayarlıyorsa Alternatif kaynakları kullanma başlıklı bölümdeki yönergeleri inceleyin.

Özellikleri devre dışı bırakma

Mevcut bir mobil uygulamayı Android Automotive OS'te kullanıma sunuyorsanız belirli özellikler ve işlevler alakalı olmayabilir veya kullanılamayabilir. Örneğin, arabalar genellikle kameralara erişim sağlamaz. Ayrıca, Android Automotive OS'te Google Play Hizmetleri'nin yalnızca bir alt kümesi kullanılabilir. Daha fazla bilgi için Google Play Hizmetleri'nin arabalarda kullanımı başlıklı makaleyi inceleyin.

Aşağıdaki örnekte gösterildiği gibi, PackageManager.hasSystemFeature API'yi kullanarak FEATURE_AUTOMOTIVE özelliğini kontrol ederek uygulamanın Android Automotive OS'te çalışıp çalışmadığını tespit edebilirsiniz:

val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
    // Enable or disable a given feature
}

Alternatif olarak, uygulamanızda Android Auto bileşeni de varsa uygulamanın Android Automotive OS veya Android Auto'da çalışıp çalışmadığını ya da hiç arabaya bağlı olup olmadığını algılamak için CarConnection API'sini Arabalar için Android uygulama kitaplığından kullanabilirsiniz.

Pencere içinde pencere (PiP) için, özelliğin kullanılabilir olup olmadığını kontrol etmek ve uygun şekilde yanıt vermek üzere belirlenmiş en iyi uygulamaları uygulayın.

Çevrimdışı senaryoları yönetme

Arabalar giderek daha fazla internete bağlı hale gelirken uygulamaların, aşağıdaki gibi durumlarda internet bağlantısı olmadan çalışacak şekilde tasarlanması önerilir:

  • Kullanıcılar, otomobil üreticisi tarafından abonelik paketi kapsamında sunulan mobil veri hizmetini devre dışı bırakabilir.
  • Mobil verilere erişim bazı bölgelerde sınırlı olabilir.
  • Kablosuz bağlantı radyoları olan arabalar kablosuz bağlantı kapsama alanının dışında olabilir veya bir OEM, mobil ağ lehine kablosuz bağlantıyı kapatabilir.

İnternet erişimine bağlı işlevleri sorunsuz bir şekilde devre dışı bırakarak (ör. çevrimdışı içerik sunarak) uygulamanızda bu senaryoları işlemeye hazır olun. Daha fazla bilgi için ağı optimize etme ile ilgili en iyi uygulamalara bakın.

Alternatif kaynakları kullanma

Uygulamanızı arabalara uyarlamanıza yardımcı olması için Android Automotive OS araçta çalışırken alternatif kaynaklar sağlamak üzere car kaynak niteleyicisini kullanabilirsiniz. Örneğin, dolgu değerlerini depolamak için Boyut kaynaklarını kullanıyorsanız dokunma hedeflerini büyütmek için car kaynak kümesi için daha büyük bir değer kullanabilirsiniz.