Android Auto ve Android Automotive OS araçlarında araç içi ekranlar yaygınlaştıkça geliştiriciler benzersiz bir ikili zorlukla karşılaşıyor: Park halindeyken zengin, uyarlanabilir deneyimler ve sürüş sırasında sürücü için güvenli, şablona dayalı deneyimler sunmak. 30 dakikalık bu kapsamlı teknik oturumda, Android uygulamalarını arabalara uyarlamaya yönelik uçtan uca mimariyi ve geliştirme yaklaşımlarını inceliyoruz.
Arabada kullanılacak uygulamalar tasarlamanın temellerinden, araba sürüşten park moduna geçtiğinde sesten videoya geçiş yapan medya deneyimleri oluşturmaya yönelik en yeni yaklaşımlara kadar, uygulamanızı yola çıkarmak için bilmeniz gereken her şeyi öğreneceksiniz.
Transkript
İşte böyle.
Herkese merhaba.
"Araba sizin tuvaliniz" oturumuna katıldığınız için teşekkür ederiz.
Bu oturumda, Android'de araçlar için uygulama geliştirme konusunu ele alacağız.
Ben Paul Lammertsma.
Ben de Thomas Weathers.
Biz Arabalar için Android ekibinde geliştirici ilişkileri mühendisleriyiz.
Birçoğunuzun, uygulamalarınızın farklı ekranlarda ve cihazlarda (telefonlar, katlanabilir cihazlar, tabletler vb.) harika görünmesi ve sorunsuz çalışması için çok zaman ve enerji harcadığınızdan eminim.
Bugün, daha önce düşünmemiş olabileceğiniz bir ekrana odaklanacağız.
Ayrıca, kullanıcılarınıza benzersiz bir şekilde ulaşmanıza yardımcı olabilir.
Bu, araç içi ekrandır.
Arabalar için Android ile neyi kastettiğimize dair kısa bir genel bakışla başlayalım.
Arabalar için Android, tek bir yapıdan ibaret değildir.
Hedefleyebileceğiniz iki platform vardır.
İlk olarak, telefon destekli ve yansıtmalı bir sistem olan Android Auto var.
Android Auto'da uygulama telefonunuzda çalışır ve kullanıcı arayüzünü kablolu veya kablosuz bağlantı kullanarak araç içi ekrana yansıtır.
İkincisi ise doğrudan aracın kendisinde çalışan bir Android varyantı olan Android Automotive OS'tir.
Android Automotive OS, telefondan bağımsız olarak çalışır, araç donanımına (ör. klima kontrolü ve radyo) doğrudan erişebilir ve en önemlisi kendi veri bağlantısını yönetir.
Android Automotive OS çalıştıran araçların bir alt kümesi, Google donanımlı araçlardır.
Google destekli arabalarda Google Play Store, Gemini ve Google Haritalar gibi Google uygulamaları ve hizmetleri de bulunur.
İki platform olsa da hedefimiz, bir kez uygulama geliştirmenizi ve her iki platformda da mükemmel deneyimler sunan uygulamalar dağıtmanızı kolaylaştırmaktır.
Şimdi, Araç Uygulama Kitaplığı kullanılarak bir kez oluşturulan bir medya uygulamasının, Android Auto ve Android Automotive OS'te farklı ekran boyutları ve şekillerinde nasıl görüneceğine dair bir örnek verelim.
Uygulama geliştirebileceğiniz birçok farklı cihaz ve yüzey türü vardır.
Bu durumda, arabalar için neden bu kadar önemli?
Öncelikle, buradaki ölçek oldukça büyük.
Şu anda trafikte Android Auto uyumlu 250 milyondan fazla araç ve 16 farklı markaya ait 100'den fazla Google donanımlı araç modeli bulunuyor.
Uygulamalarınız arabalarda kullanıldığında, kullanıcılara günlük işe gidiş gelişlerinde, aile etkinliklerine gidiş dönüşlerinde, işlerini hallederken ve hatta yolculuklarında ulaşabilirsiniz.
AAA'nın 2024 American Driving Survey raporuna göre, ABD'deki sürücüler günde ortalama 60 dakika direksiyon başında kalıyor.
Ancak kullanıcılara yalnızca araç kullanırken ulaşmazsınız.
Ayrıca, araçları park halindeyken de onlara ulaşabilirsiniz.
Örneğin, araçlarını elektrikli araç şarj istasyonunda şarj ediyor veya okul çıkışında çocuklarını almak için sırada bekliyor olabilirler.
Yolculara özel ekranların yaygınlaşmasıyla birlikte, gelecekte kullanıcılarla etkileşim kurmak için daha fazla fırsat olacağını düşünüyoruz.
İşte böyle.
Şimdi de arabalar için oluşturabileceğiniz farklı deneyim türlerine bakalım.
Arabalar için uygulama geliştirmenin nasıl olduğunu anlamak için uygulamaların araç içinde çalışırken bulunduğu iki ana durumu ve hali anlamak faydalı olacaktır.
İlk olarak, sürüş sırasında kullandığınız uygulamalar vardır.
Bunlar, araç hareket halindeyken kullanılabilen, sürüş için optimize edilmiş deneyimlerdir.
Buna, ekranda listelenen kategorilerdeki uygulamalar dahildir. Örneğin, genellikle medya olarak adlandırdığımız ses uygulamaları, mesajlaşma ve iletişim uygulamaları, navigasyon vb.
Sürüş için optimize edilmiş deneyimler, dikkat dağıtıcı unsurlara karşı koruma sağlayan katı ölçütlere uymalıdır.
Araç hareket halindeyken güvenli bir şekilde kullanılabilmesi için uygulamanın kullanıcı arayüzünün nasıl oluşturulacağıyla ilgili özel hususlar vardır.
Sürüş için optimize edilmiş uygulamalar geliştirmenin birkaç farklı yolu vardır.
Ancak bu konuşmada özellikle Car Uygulama Kitaplığı'nı kullanmaya odaklanacağız.
Bu, sürüş için optimize edilmiş kullanıcı arayüzleri sağlayan şablonlu çerçeve sunan ve aynı zamanda arabalarda bulunan çeşitli donanım yapılandırmalarına uyum sağlayan bir Jetpack kitaplıkları grubudur.
Giriş yöntemleri, ekran boyutları ve en boy oranları gibi konuları düşünün.
Arabalar için sürüşe uygun deneyimler oluşturmanın tek yolu bu olmasa da bu konuşmada odaklanmak istediğim yaklaşım, Arabalar için Android Uygulama Kitaplığı ile uygulama geliştirmek.
Buna kısaca CAL diyoruz.
Az önce de belirttiğim gibi, Car App Library, uygulamalarınızı araçlarda kullanılmak üzere oluşturmanıza yardımcı olan bir kitaplık grubudur.
Farklı donanım yapılandırmalarına uyum sağlama işini üstlenirken sürüş için optimize edilmiş kullanıcı arayüzleri sunan şablonlu bir çerçevedir.
Uygulamanızı oluştururken Android Auto veya Android Automotive OS çalıştıran tüm farklı yapılandırmalarda iyi performans göstereceğinden emin olabilirsiniz.
CAL kullanılarak oluşturulan uygulamalar bu ana makine istemci mimarisini kullanabilir.
Ana uygulama, Android Auto'nun kendisi veya Google destekli araçlarda Google Automotive App Host'tur. Bu uygulama, sistem oluşturucudur.
Kullanıcıya ekranında gösterilmesi gerekenleri nihai olarak kontrol eder.
Yani uygulama geliştirici olarak pikselleri çizen siz değilsiniz.
Bunun yerine, yapılandırılmış verileri ve verilerinizin durumunu Car App Library şablonlarına aktarırsınız.
Bu ana makine, verileri alıp güvenli ve dikkat dağıtmayacak şekilde optimize edilmiş bir düzende çizer.
Şimdi CAL'deki sınıflara ve uygulamanızı oluşturmak için genişletmeniz gereken sınıflara göz atalım. CarAppService ile başlayalım.
Bu, barındırılan uygulamaların istemci uygulamalarıyla iletişim kurması için giriş noktası görevi gören bir Android hizmeti alt sınıfıdır. Amacı, ana makinenin etkileşimde bulunduğu oturum örnekleri oluşturmaktır.
Oturumu, araçtaki bir ekranda çalışan istemci uygulamasının bir örneği olarak düşünebilirsiniz.
Diğer Android bileşenleri gibi, oturum örneğinin varlığı boyunca kullanılan kaynakları başlatmak ve kaldırmak için kullanılabilecek kendi yaşam döngüsüne sahiptir.
Bu, CarAppService ile oturum arasında bire çok ilişkidir.
Örneğin, bir CarAppService'in iki oturum örneği olabilir. Bunlardan biri birincil ekran, diğeri ise gösterge ekranlarını destekleyen navigasyon uygulamaları için gösterge ekranı içindir.
Buna örnek olarak, bir aracın birincil ekranı ve gösterge ekranı olduğunu, her ekranın özel bir oturumla ilişkilendirildiğini ve uygulama geliştirici olarak çok ekranlı araçları bu şekilde destekleyebileceğinizi gösterebiliriz.
Ardından, bir oturumda ekran örnekleri, ana uygulamalar tarafından oluşturulan kullanıcı arayüzlerini oluşturmaktan sorumludur.
Bu kullanıcı arayüzleri, her biri belirli bir düzen türünü (ör. tablo veya liste) modelleyen şablon sınıflarıyla temsil edilir.
Yani her oturum, uygulamanızın farklı bölümlerindeki kullanıcı işlemleri akışlarını yöneten bir ekran örneği yığınını yönetir. Oturumda olduğu gibi ekranın da bağlanabileceğiniz kendi yaşam döngüsü vardır.
Ancak kullanıcı arayüzünüzün ana makine tarafından oluşturulması ve Araç Uygulama Kitaplığı şablonlarını kullanmanız, sıkı bir şekilde kısıtlandığınız veya uygulamanızı özelleştiremeyeceğiniz anlamına gelmez.
Kullanabileceğiniz çok sayıda şablon ve bileşen vardır. Ayrıca, istediğiniz deneyimi elde etmek için bunları birleştirebilir ve eşleştirebilirsiniz.
Araç Uygulama Kitaplığı'ndaki her tür uygulama tarafından kullanılabilen genel amaçlı şablonlar ve navigasyon veya önemli yerler gibi belirli uygulama deneyimleri için tasarlanmış özel amaçlı şablonlar vardır.
Ancak sürüş için optimize edilmiş deneyimler oluşturmanın ayrıntılarına girmeden önce, arabalarda uygulama çalıştırabileceğiniz diğer durumdan bahsetmek istiyorum: araba park halindeyken.
Yalnızca araç park halindeyken kullanılabilen belirli uygulama kategorileri vardır. Video uygulamaları, oyunlar ve tarayıcılar bu kategoriler arasındadır.
Ancak araç hareket halinde değilken sürüş sırasında dikkat dağıtma kuralları kaldırılır ve mevcut uyarlanabilir kullanıcı arayüzünüze daha uygun deneyimler sunabilirsiniz.
Park edilmiş uygulamalar etkinliğe dayalıdır ve telefon veya tablet gibi diğer cihazlarda kullanılan etkinliklere benzer, hatta aynıdır. Park edilmiş uygulamalardan bir sonraki bölümde ayrıntılı olarak bahsedeceğiz.
Park hâlinde uygulama deneyimleri, mevcut uyarlanabilir etkinlikleri yeniden kullanır. Ancak manifest beyanları ve ekran kesmelerinden, araba hareket etmeye başladığında oynatmayı duraklatmaya kadar uymanız gereken arabaya özel kalite yönergeleri vardır.
Bu işi otomatikleştirmeye yardımcı olmak için park halindeyken kullanılabilen uygulamalara yönelik yeni bir Android becerisi kullanıma sunduk.
Başlamadan önce Android KSA'yı yüklediğinizden emin olun. KSA'ya bu kısa bağlantıdan ulaşabilirsiniz.
Ardından, kurulumu tamamladıktan sonra mevcut becerileri keşfetmek için android skills list komutunu çalıştırın.
android skills list
android skills add android-for-cars-parked-appsAndroid geliştirme sürecinizi bir üst seviyeye taşımak için kullanabileceğiniz birçok farklı beceri vardır.
Ardından, özellikle Arabalar için Android'de, beceriyi temsilcinizin bağlamına eklemek için android skills add android-for-cars-parked-apps kullanabilirsiniz.
Artık tercih ettiğiniz yapay zeka ajanı, Android Auto veya Android Automotive OS için manifest dosyanızı yapılandırma, araç penceresi eklerini ve geri gezinme gibi özellikleri yönetme, sürücünün dikkatinin dağılmasını önlemek için oynatma kısıtlamalarını uygulama konusunda size adım adım rehberlik sunar. Ayrıca, video, oyun veya tarayıcı uygulamanızı Google Play'e göndermeden önce denetleyebilir.
Bu nedenle, arabalar için uygulama geliştirmek, bu uygulama kategorileri nedeniyle biraz farklıdır.
Daha önce de belirttiğim gibi, sürüş sırasında kullanılabilecek belirli uygulama kategorileri ve park halindeyken kullanılabilecek diğer uygulama kategorileri vardır.
Vurgulanan bu kategoriler, sürüş sırasında kullanılabilen kategorilerdir.
Bunlardan bazıları CAL ile gösterilir. Bahsettiğim gibi bu, Car Uygulama kitaplığı'dır ve bu kategorideki uygulamalar az önce gördüğümüz şablonları kullanır.
Şimdi bunlara hızlıca göz atalım, çok fazla ayrıntıya girmeyeceğim.
Medya uygulamalarıyla başlayacak olursak, bunlar video değil ses oynatan uygulamalardır.
Bunları oluşturmanın iki yolu vardır.
Üstte MediaBrowserService ile gösterilen, en basit seçenektir.
Siz meta verileri sağlarsınız, bilgi-eğlence ekranı arayüzü ise oynatma ve medya tarayıcı kullanıcı arayüzünü arabaya göre optimize edilmiş şekilde oluşturur.
Diğer seçenek ise Car App Library'yi kullanarak medya uygulamaları oluşturmaktır. Bu seçenek, medya uygulamalarınızı nasıl tasarlayacağınızı ve sunacağınızı özelleştirmeniz için size daha fazla kontrol ve seçenek sunar. Thomas, birazdan bu konuda daha fazla bilgi verecek.
Rota izleme uygulamaları, rota ve adım adım yol tarifi sağladığı için elbette önemli bir kullanım alanıdır.
Araç paylaşımı sürücü uygulamaları da bu kategoriye girer.
Önemli yer uygulamaları, yakınınızdaki EV şarj üniteleri veya park yerleri gibi faydalı yerleri bulmanıza yardımcı olur.
Nesnelerin İnterneti veya IoT uygulamaları, hareket halindeyken akıllı cihazlara (ör. ev yönetimi) erişmenizi sağlar.
Hava durumu uygulamaları da mevcuttur ve anlık radar, fırtına uyarıları ve konuma özel tahminler gibi bilgiler sunabilir.
Son olarak, iletişim üç alt kategoriye ayrılır: temel bildirimleri arabaya genişletme, mesajlaşma ve görüntülü görüşme uygulamaları.
Bir de park edilmiş kategoriler var: video akış uygulamaları, oyunlar ve web tarayıcıları.
Birkaç hafta önce Android Auto ve Android Automotive OS'te oyun yayınlama özelliğinin tüm geliştiricilerin kullanımına sunulduğunu duyurmaktan mutluluk duyuyorum.
Bu kategorilerden bazılarında "Açık", bazılarında "Beta", bazılarında ise "Yakında" ifadesini göreceksiniz.
Açık, herhangi bir geliştiricinin bu kategorideki bir uygulamayı doğrudan üretime gönderebileceği anlamına gelir.
Beta, dahili veya kapalı kanallarda yayınlayabileceğiniz ancak erken erişim programına kabul edilmediğiniz sürece uygulamanın üretim kanalında yayınlanamayacağı anlamına gelir.
Bu kategorilerin her birine ait belgelerde daha fazla bilgi ve talep formumuzun bağlantısı yer alır.
"Yakında" ise şu anda desteklenmeyen ancak gelecekte desteklemeyi planladığımız kategoriler için kullanılır.
Nihai hedefimiz platformu birleştirmektir.
Kategori fark etmeksizin, bir kez yazıp hem Android Auto hem de Android Automotive OS'e dağıtarak en geniş kitleye ulaşmanızı istiyoruz.
Şimdi medya hakkında konuşmak üzere sözü Thomas'a bırakıyorum.
Hoşça kalın.
Harika.
Bu nedenle, geçen yıl medya uygulamaları için Araç Uygulama Kitaplığı'nı 1.8 sürümünde kullanıma sunduk ve Android Auto'ya şablonlu gezinme kullanıcı arayüzleri ile özel işlemler ekledik.
Buna, solda gördüğünüz medya oynatma şablonu da dahildi.
Bu yılki I/O'da, Car App Library 1.9 aracılığıyla daha fazla göz atılabilir kullanıcı arayüzü sunduk.
CAL 1.9'un beta sürümünün kullanıma sunulmasıyla birlikte artık Auto ve Automotive OS'te önemli özellik güncellemelerine erişebilirsiniz.
Öne çıkan özellikler arasında, uygulama ifadesi aracılığıyla marka özelleştirmesi yer alıyor. Bu özellik, güvenlik kurallarına uyarken renk ve şekil jetonlarını ana makine tarafından oluşturulan düzenlerle özelleştirmenize olanak tanıyor. Ayrıca, öne çıkan bölümler, sıkıştırılmış liste öğeleri, kaydırılabilir çipler ve kalıcı mini oynatıcı gibi yeni kullanıcı arayüzü bileşenleri de bulunuyor.
Ayrıca CAL 1.9, medya şablonu desteğini AAOS'a tamamen genişleterek her iki ekosistemde de gerçek platform birleştirme sağlar.
Car App Library'nin bir sonraki sürümü olan CAL 10. sürüm yakında kullanıma sunulacak.
CAL 10 sürümü, iletişim uygulamaları için daha özelleştirilmiş şablonlar sunarak sürüş sırasında daha sağlam ve özel arama deneyimleri sağlayacak.
Ayrıca, sürüş sırasında etkileşimli deneyimler sunan yeni bir uygulama kategorisi ve uygulama şablonları da ekledik.
Son olarak, Car App Library şablonlarıyla park halinden sürüşe daha sorunsuz geçişler için daha fazla işlev üzerinde çalışılıyor.
Yakında sunulacak diğer güncellemeler için takipte kalın.
Araba Uygulama Kitaplığı'nı kullanan parktan sürüşe geçiş özellikleri, uygulamanızın modlar arasında dinamik olarak geçiş yapmasına ve araç dururken uyarlanabilir içerik göstermesine, sürüş sırasında ise sorunsuz bir şekilde Araba Uygulama Kitaplığı şablonlarına geri dönmesine olanak tanır.
Temel uygulamalar arasında, sabit durumdayken özel kimlik doğrulama akışları sunma veya park halindeyken özel bir deneyim (ör. video podcast'leri veya müzik klipleri oynatma) sunma yer alır.
Bu, doğrudan medya oynatma şablonuyla entegre olur.
Bu nedenle, sabit araçlar sürücülere uygulamanızın yerel Android etkinliğine tam erişim vererek video akışı gibi rich media'ları etkinleştirir.
Araba vitese takılır takılmaz dikkat dağıtıcı unsurlara karşı koruma önlemleri devreye girer. Bu nedenle, uygulamanız uyumlu ve kesintisiz ses dinleme deneyimi sağlamak için Car App Library medya şablonuna geri döner.
Araç içi deneyimler açısından dönüştürücü bir dönemden geçiyoruz.
Medya uygulamaları, hem sürücüler hem de yolcular için daha zengin, daha sürükleyici ve etkileşimli anlar sunmak amacıyla geleneksel göz atma ve oynatma arayüzlerinin ötesine geçmek istiyor.
Şimdi, araç park moduna geçtiğinde oynatılmaya başlanacak bir yerel video etkinliğini Media3 kitaplığını kullanarak nasıl ekleyebileceğinizi gösteren bir örneği inceleyeceğiz.
Bunu başlatmak için bir video oluşturma yüzeyini doğrudan arka planda oynatma örneğinize bağlayacaksınız.
override fun onStart() {
super.onStart()
...
controllerFuture = MediaController.Builder(
this,
sessionToken
).buildAsync()
controllerFuture?.addListener({
mediaController = controllerFuture?.get()
playerView.player = mediaController
}, ContextCompat.getMainExecutor(this))
}Bu etkinlikte ayrı bir medya oynatıcı örneği oluşturmak yerine, birincil hizmetinizde (ör. Media3 medya kitaplığı hizmeti) hem ses hem de video akışlarını işleyen merkezi bir ExoPlayer veya medya oynatıcı kullanmak istiyorsunuz.
Bu nedenle, hareket halindeyken bağlı etkin bir hizmet yoksa oynatıcı yalnızca sesin kodunu çözer. Ancak sürücüler park halindeyken video etkinliğinizi açtığında, oluşturma yüzeyini doğrudan temel hizmet oynatıcısına eklemek istersiniz.
Media3'ü kullandığınızda mediaController, oynatıcıyı yerel olarak uygular. Böylece burada gördüğünüz gibi doğrudan atama yapabilirsiniz. playerView, playerView.playerdoğrudan mediaController olarak ayarlanır.
Bu nedenle, bir sonraki adımda ParkedOnlyOnClickListener kullanarak yerel giriş noktanızı kaydetmeniz gerekir.
val watchVideoAction = Action.Builder()
.setTitle("Watch Video")
.setIcon(videoCarIcon)
.setOnClickListener(
ParkedOnlyOnClickListener.create {
val intent = Intent(
carContext,
VideoPlayerActivity::class.java
)
.apply {
addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
)
}
carContext.startActivity(intent)
})
.build()Bu sarmalayıcı, medya oynatma arayüzünüzün başlık çubuğunda bir intent tetikleyici sağlar.
Bu nedenle, video oynatmayı başlatacak bir işlem ekleyip seçim dinleyicisini ParkedOnlyOnClickListener içine sarmalayın.
Sürüş modunda bu dokunmalar, sistem güvenlik mesajı gösteren ana uygulama tarafından engellenir. Bu nedenle, sürüş sırasında bu ekrana gidemezsiniz. Ancak park ettiğinizde geri çağırma, belirlenen tam ekran etkinliğini başlatmak için carContext içindeki startActivity öğesini tetikler.
Bu Araç Uygulaması Kitaplığı uygulamalarında, işletim sisteminin bunun yalnızca park edilmiş bir iş akışı olduğunu tanıması için manifest dosyasında video hedefinizi distractionOptimized=false olarak işaretlemeniz gerektiğini unutmayın.
<activity
android:name=".VideoPlayerActivity"
android:exported="false"
android:launchMode="singleTop">
<meta-data
android:name="distractionOptimized"
android:value="false" />
</activity>Son olarak, sürücü vitesi parktan sürüşe aldığında ne olduğuna bakalım.
Etkinlik, Distraction Optimization uygulanmış değilse ve araç hareket ederken etkin kalırsa AAOS, sistemi engelleyen bir yer paylaşımı gösterir. Bu yer paylaşımı, uygulamayı kullanmaya devam etmek için aracı park etmeniz gerektiğini belirtir.
Bu engellenen ekranı önlemek için ses kesintiye uğramadan medya oynatma şablonuna sorunsuz bir şekilde dönmeyi amaçlıyoruz.
Burada isRequiresDistractionOptimization doğru olarak değerlendirildiğinde, video oluşturma yüzeyini temel medya oturumunuzdan temizler ve oynatıcı etkinliğinde bitişi çağırırız. Bu etkinlik, CAL deneyiminizin üzerinde başlatıldığı için bitişi doğrudan medya oynatma şablonunuza döner ve ses oynatmayı devam ettirir.
class VideoPlayerActivity : ComponentActivity(){
override fun onStart() {
…
if (uxRestrictionsManager?
.currentCarUxRestrictions?
.isRequiresDistractionOptimization
== true) {
revertToCarAppTemplate()
}
}
private fun revertToCarAppTemplate() {
mediaControllerCompat
.sendCommand("CMD_CLEAR_VIDEO_SURFACE",
null, null)
finish()
}
}Sesin kesintisiz olarak oynatılması, mükemmel bir kullanıcı deneyimi için çok önemlidir. Bu nedenle, medya oturumunuzu ön plan hizmeti olarak etkin tutarak sesin bu durum değişiklikleri sırasında kesintisiz olarak devam etmesini sağlayabilirsiniz.
<activity
android:name="androidx.car.app.activity.CarAppActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
</intent-filter>
<meta-data
android:name="distractionOptimized"
android:value="true" />
</activity>SHOW_MEDIA_PLAYBACK amaçlarını yakalamak için CAL ekranında onNewIntent değerini de geçersiz kılmanız gerekir.
class MyCarAppSession : Session() {
override fun onCreateScreen(intent: Intent): Screen {
// 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
// 2. Handle deep link if cold-started from the vehicle's media widget
handlePlaybackIntent(intent)
return HomeScreen(carContext)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
// 3. Handle deep link when the session is already running
handlePlaybackIntent(intent)
}
}Böylece kullanıcılar, araçların ana ekranındaki araç sistemi medya widget'ıyla her etkileşimde bulunduğunda derin bağlantı, kullanıcıları doğrudan Car Uygulama kitaplığı'ndaki "Ne Çalıyor?" görünümünüze yönlendirir.
Bu nedenle, geliştirme süreci boyunca bu geçişleri doğrulamak çok kolaydır.
AAOS'ta adb komutlarını çalıştırabilirsiniz.
Bu durumda, etkinlikler arasında geçiş yapmaya hazır olduğunuzda emulate-driving-state drive veya emulate-driving-state park tuşlarına basabilirsiniz.
Aşağıda, park halinden sürüşe geçildiğinde video oynatmayı destekleyen Car Uygulama kitaplığı'nı kullanan yeni örnek Media3 medya uygulamamızla ilgili bir örnek verilmiştir.
Bu özelliği alt kattaki uyarlanabilir Android standımızda ve yakında car-samples GitHub sayfamızda inceleyebilirsiniz.
Park halinden sürüş haline geçiş özellikleri, şu anda Android Automotive OS'te, sürüş deneyimi için araç CAL ile entegre olan medya uygulamalarında kullanılabilir. Bu uygulamalar artık park halindeyken daha güçlü deneyimler sunabilir.
Çok yakında developer.android.com adresindeki belgelerimizde bu özelliği inceleyebilir ve uygulamanızda kullanmak istediğinizi belirtebilirsiniz.
Paul.
Harika.
Teşekkürler, Thomas.
Sunumu bitirmeden önce, bu yılın ilerleyen dönemlerinde kullanıma sunulacak özellikler hakkında daha fazla bilgi edinmek için yararlanabileceğiniz birkaç yöntemden bahsetmek istiyorum.
Thomas'ın da belirttiği gibi, CAL 1.9 şu anda alfa aşamasında.
Çok yakında beta sürümüne geçecek.
Ardından CAL 1.10, yıl sonundan önce alfa sürümüne girecek. Böylece, etkileşimli kullanıcı arayüzlerini ve en yeni iletişim ve parktan sürüşe geçiş özelliklerini değerlendirmeye başlayabilirsiniz.
Son olarak, oyunların Android Auto ve Android Automotive OS'te kullanılabildiğini paylaşmaktan heyecan duyuyoruz. Bu nedenle, oyunlarınızı arabalar için optimize etmenin tam zamanı.
Uygulama ayrıntıları hakkında daha fazla bilgi edinmek için "Arabalar için oyun geliştirme" kılavuzundaki belgeleri inceleyin.
Oyunlarınızı arabalara nasıl uyarlayacağınız hakkında daha fazla bilgi edinmek ve Arabalar için Android'deki diğer yenilikleri ve değişiklikleri takip etmek için "Yenilikler" sayfamızı ziyaret edebilirsiniz.
Arabaların ve kullanıcılarının uygulamalarınız için hazır olduğunu görmüşsünüzdür.
Park halindeyken zengin deneyimler sunmak için mevcut uyarlanabilir uygulamalarınızı geliştirebilir ve güvenli sürüş için optimize edilmiş bu deneyimleri oluşturmak üzere çeşitli Car App Library şablonlarını kullanabilirsiniz.
Yayınlamadan önce Masaüstü Ana Birimi, emülatörler, Pixel Tablet'te çalışan AAOS veya Firebase Test Lab'i kullanarak kapsamlı bir şekilde test edebilirsiniz.
Bu ekosistem için uygulama geliştirecek becerilere zaten sahipsiniz ve milyonlarca araç uygulamalarınızı bekliyor. Haydi, uygulamanızı yola çıkaralım.
android skills list
android skills add android-for-cars-parked-appsoverride fun onStart() {
super.onStart()
...
controllerFuture = MediaController.Builder(
this,
sessionToken
).buildAsync()
controllerFuture?.addListener({
mediaController = controllerFuture?.get()
playerView.player = mediaController
}, ContextCompat.getMainExecutor(this))
}val watchVideoAction = Action.Builder()
.setTitle("Watch Video")
.setIcon(videoCarIcon)
.setOnClickListener(
ParkedOnlyOnClickListener.create {
val intent = Intent(
carContext,
VideoPlayerActivity::class.java
)
.apply {
addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
)
}
carContext.startActivity(intent)
})
.build()<activity
android:name=".VideoPlayerActivity"
android:exported="false"
android:launchMode="singleTop">
<meta-data
android:name="distractionOptimized"
android:value="false" />
</activity>class VideoPlayerActivity : ComponentActivity(){
override fun onStart() {
…
if (uxRestrictionsManager?
.currentCarUxRestrictions?
.isRequiresDistractionOptimization
== true) {
revertToCarAppTemplate()
}
}
private fun revertToCarAppTemplate() {
mediaControllerCompat
.sendCommand("CMD_CLEAR_VIDEO_SURFACE",
null, null)
finish()
}
}<activity
android:name="androidx.car.app.activity.CarAppActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
</intent-filter>
<meta-data
android:name="distractionOptimized"
android:value="true" />
</activity>class MyCarAppSession : Session() {
override fun onCreateScreen(intent: Intent): Screen {
// 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
// 2. Handle deep link if cold-started from the vehicle's media widget
handlePlaybackIntent(intent)
return HomeScreen(carContext)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
// 3. Handle deep link when the session is already running
handlePlaybackIntent(intent)
}
}