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
Uygulamanızı Android Automotive OS için oluşturmaya başlamak üzere önce mevcut uygulamanızı bir 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 başlıklı makaledeki adımları uygulayın. Ardından, Uygulamanızı emülatörde çalıştırma başlıklı makaledeki 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önergelerini karşılamak için uygulamaların 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ın nasıl ele alınacağı hakkında ayrıntılı bilgi 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ı hedeflemek için uygulamanızda belirli manifest girişleri olmalıdır. Android Automotive OS cihazlara dağıtım özelliğini etkinleştirdikten sonra, uyumlu uygulamalar arabalarda kullanıma uygun olduklarından emin olmak için manuel bir inceleme sürecinden geçer. Daha fazla bilgi için Araçlara dağıtın başlıklı makaleyi inceleyin.
Gerekli Android Automotive OS özellikleri
Android Automotive OS için oluşturulan tüm uygulamaların Google Play kullanılarak dağıtılabilmesi için belirli koşulları karşılaması gerekir. Daha fazla bilgi için Google Play özellik koşullarını karşılama başlıklı makaleyi inceleyin.
Kategoriye özel manifest girişleri
Park edilmiş tüm uygulamalar için geçerli olan önceki şartlara ek olarak, video ve oyun kategorileri için ek şartlar vardır:
- 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 sunarken sürücünün dikkatinin dağılmaması çok önemlidir. Park edilmiş uygulamalarda bu, öncelikle 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ın veya ses çalmasının engellenmesi yoluyla gerçekleştirilir.
Kullanıcı deneyimi kısıtlamaları etkinken kullanımı engelleme
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ı amacıyla, 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 ettirilirse bu etkinlik, işletim sisteminin sahip olduğu bir etkinlik tarafından gizlenir.
En azından uygulamanızın etkinliği 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 işlevi olarak gerçekleşir.
Android Automotive OS uyumluluk modunu içeren cihazlarda sistem engellemesi, uygulamanızın etkinliklerinin Duraklatıldı durumundan Durdurulandı durumuna geçiş yapmasına neden olur.
Oynatma işlemini durdurma ve oynatmanın devam etmesini engelleme
Bazı uygulamalarda, sürücünün dikkatini dağıtma şartlarını karşılamak için onPause()
sırasında oynatmayı duraklatma ve onResume()
'a kadar oynatmanın devam etmesini engellemek üzere izleme durumu yeterlidir.
Yaşam döngüsü geri çağırmalarına yanıt 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ğırmalarında koşullu kontroller yapmak yerine doğrudan dinlemeyi tercih edebilir.
Kullanıcı deneyimi kısıtlamalarını dinleyin
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'sının bir uzantısıdır.
android {
...
useLibrary("android.car")
}
Kullanıcı deneyimi kısıtlama durumunu okumak için CarUxRestrictionsManager
simgesini kullanın. Kullanıcı deneyimi kısıtlamaları bir araçtaki ekrandan ekrana değişebileceğ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)
val carUxRestrictionsManager =
car.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE) as CarUxRestrictionsManager
// You can either read the state directly ...
val currentUxRestrictions = carUxRestrictionsManager.currentUxRestrictions
// or listen to state changes
carUxRestrictionsManager.registerListener { carUxRestrictions: CarUxRestrictions -> ...}
// Don't forget to teardown and release resources when they're no longer needed
carUxRestrictionsManager.unregisterListener()
car.disconnect()
CarUxRestrictions
tarafından sağlanan ve uygulamanızın referans vermesi gereken tek değer, isRequiresDistractionOptimization()
işlevinin döndürdüğü değerdir. Diğer değerler yalnızca dikkat dağıtıcı unsurlar için optimize edilmiş olarak işaretlenen etkinliklerle ilgilidir.
Uygulamanızı test etme
Uygulamanızın sürücünün dikkatini dağıtan unsurlarla ilgili koşulları karşıladığını doğrulamak için aşağıdaki prosedürü uygulayın:
- Uygulamanızı Google Play Store veya Uyumluluk modu olmadan bir sistem resmine yükleyin.
- Başlatıcı uygulama ızgarası açıkken araç kullanmayı simüle edin ve uygulamanızın açılamadığını doğrulayın.
- Sürüş simülasyonunu durdurun, uygulamanızı oynatma ekranına getirin ve oynatmaya başlayın.
- Sürüş simülasyonunu tekrar yapın ve oynatmanın duraklatıldığını doğrulayın.
- Uygulamanız
MediaSession
ile entegrasyonu destekliyorsaadb shell cmd media_session dispatch play
'ü kullanı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 arabalarda mümkün olan en iyi deneyimi sunmak için Android Automotive OS için uygulamanızı oluştururken aşağıdakileri göz önünde bulundurun:
Pencere içe eklemeleri 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ü öğelerini ve dikdörtgen olmayan ekranları destekler.
Varsayılan olarak uygulamalar, sistem çubuklarıyla veya ekran kesikleriyle çakışmayan bir alanda çizilir. Ancak uygulamanızın sistem çubuklarını gizlemesini, arkalarında içerik çizmesini veya Uygulamanızı pencere içlerinde düzenleyin bölümünde açıklandığı gibi ekranda bir kesitte içerik göstermesini isteyebilirsiniz. Uygulamanız bu işlemlerin herhangi birini yapıyorsa uygulamanızın Android Automotive OS cihazlarının ekosisteminde sorunsuz şekilde çalışması için aşağıdaki alt bölümlere bakın.
Sistem çubukları, tam ekran modu ve uçtan uca oluşturma
Araçlardaki sistem çubukları, diğer form faktörlerine göre farklı boyut ve konumda olabilir. Örneğin, gezinme çubukları ekranın sol, sağ veya alt tarafı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 tam sayfa moduna girmek ve bu moddan çıkmak için sistem çubuklarını gösterip gizlemeyeceğ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çe eklemeleri değiştirip değiştiremediğini nasıl algılayacağınız hakkında daha fazla bilgi edinmek için show
ve hide
dokümanlarına bakın.
Benzer şekilde OEM'ler, sistem çubuklarının ve barların içerdiği öğelerin her zaman net bir şekilde görülebilmesi için uygulamaların sistem çubuklarının rengini ve saydamlığını ayarlayıp ayarlayamayacağını da kontrol edebilir. Uygulamanız kenardan kenara çiziyorsa sistem çubuklarının arkasında yalnızca kritik olmayan içeriğin çizildiğinden emin olun. Cihaz OEM'si çubukların rengini veya saydamlığını ayarlamayı 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 kenardan kenara uzanıyorsa 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 içe ekleme API'lerini kullanın. Bu API'lerin nasıl kullanılacağı hakkında daha fazla bilgi için Uygulamanızda içeriği kenarlara kadar 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ği güvenli alanda tutmak için muhtemelen işe yaramaz.
Düzensiz şekilli ekranlara uyum sağlama
Bazı araçlarda dikdörtgen ekranlara ek olarak Şekil 1'de gösterildiği gibi düzensiz şekilli ekranlar da bulunabilir:

Uygulamanız kenardan kenara oluşturulmuyorsa güvenli alanda oluşturulması için herhangi bir işlem yapmanız gerekmez.
Uygulamanız uçtan uca oluşturuluyorsa ekrandaki kesiklerle ilgili nasıl davranmasını istediğinizi seçebilirsiniz. Bunu, uygulamanızın teması için android:windowLayoutInDisplayCutoutMode
özelliğini ayarlayarak veya çalışma zamanında pencerenin layoutInDisplayCutoutMode
özelliğini değiştirerek kaynaklardan yararlanarak yapabilirsiniz.
Android Automotive OS cihazlarındaki ekran kesiklerinin türleri mobil cihazlardaki kesiklerden farklı olduğundan, mobil cihazlardaki kesiklerle uyumlu şekilde optimize edilmiş davranışa sahip LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
veya LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
öğelerini kullanmayın. Bunun yerine, kesme noktasını her zaman atlamak veya her zaman girmek için LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
veya LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
kullanın. İkincisini seçerken, ekran kesikleriyle ilgili API'ler hakkında daha fazla bilgi için Ekran kesiklerini destekleme başlıklı makaleyi inceleyin.
Uygulamanız ekrandaki kesik alana oluşturuluyorsa ve Android Automotive OS ile mobil cihazlar arasında farklı bir davranış olmasını istiyorsanız uygulamanız bu davranışı çalışma zamanında ayarlıyorsa Özellikleri devre dışı bırakma başlıklı makaleyi, uygulamanız bu davranışı kaynak dosyaları kullanarak ayarlıyorsa Alternatif kaynaklar kullanma başlıklı makaleyi 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 yalnızca Google Play Hizmetleri'nin 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 kullanabilirsiniz. Bunun için aşağıdaki örnekte gösterildiği gibi FEATURE_AUTOMOTIVE
özelliğini kontrol edebilirsiniz:
Kotlin
val packageManager: PackageManager = ... // Get a PackageManager from a Context val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
Java
PackageManager packageManager = ... // Get a PackageManager from a Context boolean 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ı ya da hiç araca bağlı olup olmadığını tespit etmek için Arabalar için Android Uygulama Kitaplığı'ndaki CarConnection
API'sini kullanabilirsiniz.
Resim içinde resim (PiP) özelliğinin kullanılabilir olup olmadığını kontrol etmek ve uygun şekilde tepki vermek için belirlenmiş en iyi uygulamaları uygulayın.
Çevrimdışı senaryoları işleme
Arabalar giderek daha fazla internete bağlansa da uygulamaların internet bağlantısı olmadan çalışmasını sağlamak önerilir. Örneğin, aşağıdaki durumlarda:
- Kullanıcılar, otomobil üreticisinin abonelik paketi kapsamında sunulan mobil verileri devre dışı bırakabilir.
- Mobil verilere erişim bazı bölgelerde sınırlı olabilir.
- Kablosuz radyo bulunan araçlar kablosuz kapsama alanında olmayabilir veya OEM, mobil ağ tercih ettiği için kablosuz bağlantıyı kapatmış olabilir.
İnternet erişimine bağlı işlevleri (ör. çevrimdışı içerik sunarak) uygun şekilde azaltarak uygulamanızda bu senaryoları ele almaya hazır olun. Daha fazla bilgi için ağları optimize etmeyle ilgili en iyi uygulamalara bakın.
Alternatif kaynaklar kullanma
Uygulamanızı arabalara uyarlamak için Android Automotive OS aracında çalışırken alternatif kaynaklar sağlamak amacıyla car
kaynak tanımlayıcısı 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.