Uygulamanızı Android Automotive OS cihazlara 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ı bir Android Automotive OS emülatöründe test edin. 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ğıdakiler gibi uyumluluk sorunlarına dikkat edin:
- Bilgi-eğlence ekranlarının yönü sabittir. Araba uygulaması kalite yönergelerine uymak için uygulamaların hem dikey hem de yatay yönü 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ın nasıl ele alınacağıyla ilgili ayrıntılar için Özellikleri devre dışı bırakma bölümüne bakın.
Android becerileri
GitHub'da gösterArabalar için Android park uygulamaları
android skills add android-for-cars-parked-appsUygulamanızın manifest dosyasını yapılandırma
Android Automotive OS cihazları hedeflemek için uygulamanızda belirli manifest girişleri bulunmalıdır. Android Automotive OS cihazlara dağıtım yapmayı etkinleştirdikten sonra Google Play, uyumlu uygulamaları inceleyerek arabada güvenle kullanılabileceklerinden emin olur. Daha fazla bilgi için Arabalara dağıtma başlıklı makaleyi inceleyin.
Gerekli Android Automotive OS özellikleri
Android Automotive OS için geliştirilen tüm uygulamaların Google Play kullanılarak dağıtılabilmesi için belirli şartları karşılaması gerekir. Daha fazla bilgi için Google Play özellik şartlarını karşılama başlıklı makaleyi inceleyin.
Kategoriye özel manifest girişleri
Tüm park edilmiş uygulamalar için geçerli olan yukarıdaki şartlara ek olarak video ve oyun kategorileri için ek şartlar geçerlidir:
- Video uygulamaları için Uygulamanızı video uygulaması olarak işaretleme bölümüne bakın.
- Oyunlar için Uygulamanızı oyun olarak işaretleme başlıklı makaleyi inceleyin.
Sürücünün dikkatinin dağılmasıyla ilgili şartları karşılama
Uygulamanızı arabalara getirirken sürücünün dikkatinin dağılmasını önlemek çok önemlidir. Park halindeyken kullanılabilen uygulamalarda bu durum, DD-2 ve DD-3 kalite yönergelerinde belirtildiği gibi kullanıcı deneyimi (UX) kısıtlamaları etkinken uygulamanızın kullanılmasını veya ses çalmasını engelleyerek sağlanır.
Kullanıcı deneyimi kısıtlamaları etkinken kullanımı engelle
Varsayılan olarak, kullanıcı deneyimi kısıtlamaları etkinken etkinlikler kullanılamaz veya başlatılamaz. Bu davranışın uygulamanız için geçerli olması için manifest dosyanızdaki herhangi bir <activity> öğesinde aşağıdaki <meta-data> öğesi bulunmamalıdır:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Kullanıcı deneyimi kısıtlamaları etkinleştiğinde uygulamanızdaki bir etkinlik Devam ettirildi durumundaysa 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çer. Bu, uygulamanızdan hem video hem de ses oynatmayı duraklatmanız gereken bir onPause yaşam döngüsü geri çağırma yöntemi olarak gerçekleşir.
Android Automotive OS uyumluluk modu'nu içeren cihazlarda sistem engellemesi, uygulamanızın etkinliklerinin Duraklatıldı durumundan Durduruldu durumuna geçmesine neden olur.
Oynatmayı durdurma ve kaldığı yerden oynatmayı engelleme
Bazı uygulamalarda, onPause() sırasında oynatmayı duraklatmak ve onResume() olana kadar oynatmanın devam etmesini önlemek için durumu izlemek, sürücünün dikkatinin dağılmasıyla ilgili şartları karşılamak için yeterlidir.
Yaşam döngüsü geri çağırma yöntemlerine tepki vermek uygulamanız için 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ğırma yöntemlerinde koşullu kontroller yapmak yerine doğrudan dinlemeyi tercih edebilir.
Kullanıcı deneyimi kısıtlamalarını dinleme
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 özel API'ler sağlayan Android SDK'sı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ı, araç içindeki 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 başvurduğu, CarUxRestrictions tarafından sağlanan tek değer isRequiresDistractionOptimization işlevinin döndürdüğü değerdir.
Diğer değerler yalnızca Distraction Optimization Uygulanmış 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 dikkatinin dağılmasıyla ilgili şartları karşıladığını doğrulayın:
- Uygulamanızı Google Play Store veya uyumluluk modu olmayan bir sistem görüntüsüne yükleyin.
- Başlatıcı uygulama tablosu açıkken sürüş simülasyonu yapın ve uygulamanızın açılamadığını doğrulayın.
- Sürüş simülasyonunu durdurun, uygulamanızı açarak oynatma ekranına gidin ve oynatmayı başlatın.
- Sürüşü tekrar simüle edin ve oynatmanın duraklatıldığı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
Kullanıcılarınıza araçlarda mümkün olan en iyi deneyimi sunmak için Android Automotive OS uygulamanızı geliştirirken aşağıdakileri göz önünde bulundurun:
Pencere ekleri ve ekran kesikleriyle çalışma
Diğer form faktörlerinde olduğu gibi Android Automotive OS'te de durum ve gezinme çubukları gibi sistem kullanıcı arayüzü öğeleri bulunur ve dikdörtgen olmayan ekranlar desteklenir.
Varsayılan olarak uygulamalar, sistem çubukları veya ekran kesimiyle çakışmayan bir alanda çizim yapar. Ancak uygulamanızın sistem çubuklarını gizlemesini, arkalarında içerik çizmesini veya Uygulamanızı pencere ekleri içinde düzenleme bölümünde açıklandığı gibi ekran kesmesinde içerik göstermesini isteyebilirsiniz. Uygulamanız bunlardan herhangi birini yapıyorsa uygulamanızın Android Automotive OS cihaz ekosisteminde sorunsuz çalışmasını nasıl sağlayacağınızla 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
Otomobillerdeki sistem çubukları, diğer form faktörlerinden farklı boyut ve konumlarda olabilir. Örneğin, gezinme çubukları ekranın sol, sağ veya alt kısmına yerleştirilebilir. Üstte bir durum çubuğu ve altta bir 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 yoğun içerik moduna girmek ve bu moddan çıkmak için sistem çubuklarını gösterip gizleyemeyeceğini kontrol etmesine olanak tanır. Örneğin, OEM'ler uygulamaların sistem çubuklarını gizlemesini engelleyerek klima kontrolleri gibi araç kontrollerinin ekranda her zaman erişilebilir olmasını 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 iç kısımları değiştirip değiştiremediğini nasıl tespit edeceğiniz hakkında daha fazla bilgi edinmek için show ve hide belgelerine bakın.
Benzer şekilde OEM'ler, uygulamaların sistem çubuklarının rengini ve şeffaflığını ayarlayıp ayarlayamayacağını da kontrol edebilir. Böylece çubukların ve içerdikleri öğelerin her zaman net bir şekilde görünmesini sağlayabilirler. Uygulamanız uçtan uca çizim yapıyorsa sistem çubuklarının arkasında yalnızca kritik olmayan içeriklerin çizildiğinden emin olun. Cihaz OEM'i ç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 düzenlemek için pencere ekleri API'lerini kullanın. Bu API'lerin kullanımı 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 kodlu dolgu değerleri hiçbir form faktörü için önerilmez ancak arabalarda içeriği güvenli alanda tutmak için hiç işe yaramaz.
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 olabilir:
Uygulamanız uçtan uca oluşturulmuyorsa güvenli alanda oluşturulması için herhangi bir işlem yapmanız gerekmez.
Uygulamanız uçtan uca görüntüleniyorsa ekran kesintileriyle ilgili 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 kesmesi türleri mobil cihazlardakinden farklı olduğundan, mobil cihazlarda bulunan kesmeler için optimize edilmiş davranışlara sahip LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT veya LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES kullanmayın. Bunun yerine,
kesikten her zaman kaçınmak veya her zaman kesiğe girmek için LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
veya LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
kullanın. İkinci seçeneği tercih ederseniz ekran kesikleriyle ilgili API'ler hakkında daha fazla bilgi için Ekran kesiklerini destekleme başlıklı makaleyi inceleyin.
Uygulamanız ekran kesiği alanında oluşturuluyorsa ve Android Automotive OS ile mobil cihazlar arasında farklı davranışlar olmasını 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 bölümüne bakın.
Özellikleri devre dışı bırakma
Mevcut bir mobil uygulamayı Android Automotive OS'te kullanıma sunuyorsanız belirli özellikler ve işlevler alakalı veya kullanılabilir olmayabilir. Ö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 Arabalar için Google Play Hizmetleri başlıklı makaleyi inceleyin.
Uygulamanın Android Automotive OS'te çalışıp çalışmadığını tespit etmek için PackageManager.hasSystemFeature API'sini kullanarak FEATURE_AUTOMOTIVE özelliğini kontrol edebilirsiniz. Aşağıdaki örnekte bu işlem gösterilmektedir:
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'te mi yoksa Android Auto'da mı çalıştığını veya bir arabaya bağlı olup olmadığını tespit etmek için Arabalar için Android Uygulama Kitaplığı'ndaki CarConnection API'yi kullanabilirsiniz.
Pencere içinde pencere (PiP) için, özelliğin kullanılabilir olup olmadığını kontrol etmek ve uygun şekilde tepki vermek üzere belirlenmiş en iyi uygulamaları izleyin.
Çevrimdışı senaryoları yönetme
Arabalar internete giderek daha fazla bağlanırken uygulamaların internet bağlantısı olmadan çalışmayı desteklemesi önerilir. Örneğin:
- Kullanıcılar, otomobil üreticisinin abonelik paketi kapsamında sunulan mobil verileri devre dışı bırakabilir.
- Belirli bölgelerde mobil veriye erişim sınırlı olabilir.
- Kablosuz radyo bulunan arabalar kablosuz ağ kapsama alanının dışında olabilir veya OEM, mobil ağ kullanmak için kablosuz bağlantıyı kapatabilir.
İnternet erişimine bağlı işlevleri kontrollü bir şekilde azaltarak (ör. çevrimdışı içerik sunarak) uygulamanızda bu senaryoları yönetmeye hazır olun. Daha fazla bilgi için Ağ kullanımını optimize etmeye yönelik en iyi uygulamalar başlıklı makaleyi inceleyin.
Alternatif kaynakları kullanma
Uygulamanızı arabalara uyarlamak için Android Automotive OS araçlarda çalışırken alternatif kaynaklar sağlamak üzere car kaynak niteleyiciyi kullanabilirsiniz. Örneğin, dolgu değerlerini depolamak için boyut kaynakları kullanıyorsanız dokunma hedeflerini büyütmek için car kaynak kümesinde daha büyük bir değer kullanabilirsiniz.