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:
- Video uygulamaları için Uygulamanızı video uygulaması olarak işaretleme başlıklı makaleyi inceleyin.
- Oyunlar için Uygulamanızı oyun olarak işaretleme başlıklı makaleyi inceleyin.
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:
- Uygulamanızı Google Play Store veya uyumluluk modu olmadan sistem görüntüsüne yükleyin.
- Başlatıcı uygulama tablosu açıkken sürüşü simüle edin ve uygulamanızın açılamadığını doğrulayın.
- Sürüş simülasyonunu durdurun, uygulamanızı oynatma ekranında açın ve oynatmaya başlayın.
- Sürüşü tekrar simüle edin ve oynatmanın durakladığını doğrulayın.
- Uygulamanız
MediaSessionile entegrasyonu destekliyorsaadb shell cmd media_session dispatch playkullanın ve oynatmanın devam etmediğini doğrulayın.
- Uygulamanız
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:
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.