Seiring dengan perluasan layar dalam mobil di kendaraan Android Auto dan Android Automotive OS, developer menghadapi tantangan ganda yang unik: memberikan pengalaman yang kaya dan adaptif saat parkir, serta pengalaman berbasis template yang aman bagi pengemudi saat mengemudi. Dalam sesi teknis komprehensif berdurasi 30 menit ini, kami akan membahas arsitektur menyeluruh dan pendekatan pengembangan untuk mengadaptasi aplikasi Android ke mobil.
Mulai dari dasar-dasar mendesain aplikasi untuk digunakan di mobil, hingga pendekatan terbaru untuk membangun pengalaman media yang beralih dari audio ke video saat mobil beralih dari mode berkendara ke parkir, Anda akan mendapatkan semua yang perlu diketahui untuk menghadirkan aplikasi Anda di mobil.
Transkrip
Oke.
Selamat datang semuanya.
Terima kasih telah bergabung bersama kami dalam sesi ini, Mobil adalah kanvas Anda.
Sesi ini membahas cara mengoptimalkan pengembangan Android untuk penggunaan di jalan.
Saya Paul Lammertsma.
Dan saya Thomas Weathers.
Kami adalah engineer developer relations di tim Android untuk Mobil.
Kami yakin banyak dari Anda yang telah menghabiskan banyak waktu dan energi untuk memastikan aplikasi Anda terlihat bagus dan berfungsi dengan baik di berbagai layar dan perangkat, ponsel, perangkat foldable, tablet, dan sebagainya.
Hari ini, kita akan berfokus pada layar yang mungkin belum Anda pikirkan.
Dan, hal ini dapat membantu Anda menjangkau pengguna dengan cara yang unik.
Itu adalah layar dalam mobil.
Jadi, mari kita mulai dengan ringkasan singkat tentang apa yang dimaksud dengan Android untuk Mobil.
Android untuk Mobil bukanlah satu hal yang monolitik.
Ada dua platform yang dapat Anda targetkan.
Pertama, ada Android Auto, yang merupakan sistem proyeksi yang didukung ponsel.
Dengan Android Auto, aplikasi dijalankan di ponsel Anda dan memproyeksikan UI-nya ke layar dalam mobil menggunakan koneksi berkabel atau nirkabel.
Kedua, ada Android Automotive OS, dan ini adalah varian Android yang berjalan langsung di kendaraan itu sendiri.
Android Automotive OS berjalan secara independen dari ponsel, memiliki akses langsung ke hardware kendaraan, seperti pengatur suhu dan radio, dan yang penting, juga mengelola koneksi datanya sendiri.
Sebagian mobil yang menjalankan Android Automotive OS adalah mobil yang dilengkapi Google.
Mobil yang dilengkapi Google juga dilengkapi dengan aplikasi dan layanan Google, seperti Google Play Store, Gemini, dan Google Maps.
Meskipun ada dua platform, sasaran kami adalah memudahkan Anda membangun aplikasi sekali dan dapat men-deploy aplikasi yang memberikan pengalaman luar biasa di kedua platform.
Berikut contoh aplikasi media yang dibuat sekali menggunakan Library Aplikasi Mobil, dan tampilannya di Android Auto dan Android Automotive OS, dalam berbagai ukuran dan bentuk layar.
Ada banyak jenis perangkat dan platform yang dapat Anda buat.
Jadi, muncul pertanyaan, mengapa hal ini juga berlaku untuk mobil?
Pertama, skalanya sangat besar.
Saat ini, ada lebih dari 250 juta mobil yang kompatibel dengan Android Auto dan lebih dari 100 model mobil yang dilengkapi Google dari 16 merek berbeda.
Dan saat aplikasi Anda ada di mobil, Anda menjangkau pengguna dalam perjalanan harian mereka, ke dan dari aktivitas keluarga, melakukan tugas, dan bahkan dalam perjalanan darat.
Di Amerika Serikat, menurut American Driving Survey 2024 dari AAA, pengemudi menghabiskan rata-rata 60 menit per hari di belakang kemudi.
Namun, Anda tidak hanya menjangkau pengguna saat mereka aktif mengemudi.
Anda juga menjangkau mereka saat mereka sedang parkir.
Mungkin mereka sedang mengisi daya kendaraan di Stasiun Pengisian Kendaraan Listrik Umum, atau mungkin sedang mengantre di jalur penjemputan sekolah.
Dengan meningkatnya penggunaan layar khusus penumpang, kami berharap dapat melihat lebih banyak peluang pada masa mendatang untuk mendorong interaksi dengan pengguna.
Oke.
Sekarang, mari kita lihat berbagai jenis pengalaman yang dapat Anda bangun untuk mobil.
Untuk memahami cara membangun aplikasi untuk mobil, sebaiknya pahami dua situasi dan status utama yang ada untuk aplikasi saat berjalan di dalam kendaraan.
Pertama, ada aplikasi yang Anda gunakan saat mengemudi.
Ini adalah pengalaman yang dioptimalkan untuk mengemudi yang dapat digunakan saat kendaraan sedang bergerak.
Ini mencakup aplikasi dalam kategori yang Anda lihat tercantum di layar, seperti aplikasi audio, yang biasanya kami sebut sebagai aplikasi media, pesan, dan komunikasi, navigasi, dan sebagainya.
Pengalaman yang dioptimalkan untuk mengemudi harus mematuhi kriteria perlindungan gangguan yang ketat.
Ada pertimbangan khusus tentang cara membuat UI untuk aplikasi agar dapat digunakan dengan aman saat kendaraan sedang bergerak.
Sekarang ada beberapa cara berbeda untuk membuat aplikasi yang dioptimalkan untuk mengemudi.
Namun, dalam pembahasan ini, khususnya, kita akan berfokus pada penggunaan Library Aplikasi Mobil.
Ini adalah serangkaian library Jetpack yang menyediakan template framework berisi antarmuka pengguna yang dioptimalkan untuk mengemudi, sekaligus memungkinkan adaptasi dengan berbagai konfigurasi hardware yang ada di mobil.
Jadi, pikirkan tentang modalitas input, ukuran layar, dan rasio aspek.
Meskipun ini bukan satu-satunya cara untuk membangun pengalaman yang dioptimalkan untuk mengemudi di mobil, pendekatan yang ingin saya fokuskan dalam pembahasan ini adalah membangun dengan Library Aplikasi Android untuk Mobil.
Kami sering menyebutnya CAL.
Seperti yang telah disebutkan sebelumnya, Library Aplikasi Mobil adalah serangkaian library yang membantu mem-build aplikasi Anda untuk digunakan di kendaraan.
Library ini adalah template framework yang menyediakan antarmuka pengguna yang dioptimalkan untuk mengemudi sekaligus menangani pekerjaan adaptasi dengan berbagai konfigurasi hardware.
Anda dapat membangun aplikasi dan yakin bahwa aplikasi tersebut akan berperforma baik di semua variasi konfigurasi yang berbeda, baik yang menjalankan Android Auto maupun Android Automotive OS.
Aplikasi yang di-build menggunakan CAL dapat mengandalkan arsitektur host klien ini.
Aplikasi host, yang merupakan Android Auto itu sendiri atau Google Automotive App Host untuk mobil yang dilengkapi Google, adalah perender sistem.
Pada akhirnya, sistem ini mengontrol apa yang perlu ditampilkan kepada pengguna di layar mereka.
Jadi, sebagai developer aplikasi, Anda tidak perlu menggambar piksel.
Sebagai gantinya, Anda memasukkan data terstruktur dan status data Anda ke template Library Aplikasi Mobil.
Host inilah yang kemudian mengambil data ini, dan menggambarnya dengan aman, dengan cara yang mematuhi standar keselamatan, dengan tata letak yang dioptimalkan untuk mengurangi distraksi.
Jadi, mari kita lihat class dalam CAL, apa yang perlu Anda perluas untuk membangun aplikasi, dimulai dengan CarAppService.
Ini adalah subclass layanan Android yang berfungsi sebagai titik entri bagi aplikasi host untuk berkomunikasi dengan aplikasi klien, dan tujuannya adalah membuat instance sesi yang kemudian akan berinteraksi dengan host.
Sesi dapat dianggap sebagai instance aplikasi klien yang dijalankan di layar kendaraan.
Seperti komponen Android lainnya, class ini memiliki siklus prosesnya sendiri yang dapat digunakan untuk menginisialisasi dan mengakhiri resource yang digunakan selama masa aktif instance sesi.
Ini adalah hubungan one-to-many antara CarAppService dan sesi.
Misalnya, CarAppService mungkin memiliki dua instance sesi, satu untuk layar utama, dan satu lagi untuk layar cluster aplikasi navigasi yang mendukung layar cluster.
Berikut contohnya, saat mobil memiliki layar utama dan layar cluster, setiap layar dikaitkan dengan sesi khusus, dan ini juga cara Anda, sebagai developer aplikasi, dapat mendukung kendaraan multi-layar.
Kemudian, dalam sebuah sesi, instance layar berfungsi menghasilkan antarmuka pengguna yang dirender oleh aplikasi host.
Antarmuka pengguna ini direpresentasikan oleh class template sehingga setiap model memiliki jenis tata letak tertentu, dan dapat berupa, misalnya, petak, atau daftar.
Jadi, setiap sesi mengelola stack instance layar yang menangani alur penggunaan di berbagai bagian aplikasi Anda, dan, seperti halnya sesi, layar memiliki siklus prosesnya sendiri yang dapat Anda gunakan.
Namun, hanya karena host merender UI Anda, dan Anda menggunakan template Koleksi aplikasi Mobil, bukan berarti Anda sangat dibatasi, atau tidak dapat menyesuaikan aplikasi.
Ada banyak template dan komponen yang dapat Anda gunakan, dan Anda juga dapat memadupadankan untuk mendapatkan pengalaman yang Anda inginkan.
Ada template tujuan umum, yang dapat digunakan oleh semua jenis aplikasi dalam Koleksi aplikasi Mobil, dan ada template tujuan khusus yang dimaksudkan untuk pengalaman aplikasi tertentu, seperti navigasi, atau lokasi menarik.
Namun, sebelum membahas detail pembuatan pengalaman yang dioptimalkan untuk mengemudi, kami ingin membahas situasi lain saat Anda dapat menjalankan aplikasi di mobil: saat mobil diparkir.
Ada kategori aplikasi tertentu yang hanya dapat digunakan saat kendaraan diparkir, dan ini mencakup hal-hal seperti aplikasi video, game, dan browser.
Namun, saat mobil tidak bergerak, panduan gangguan bagi pengemudi tidak berlaku, dan Anda dapat memberikan pengalaman yang lebih sesuai dengan UI adaptif yang ada.
Aplikasi yang diparkir berbasis aktivitas, dan mirip, atau bahkan sama, dengan aktivitas yang digunakan di perangkat lain, seperti ponsel atau tablet, dan kita akan membahas aplikasi yang diparkir secara mendetail di bagian berikutnya.
Meskipun pengalaman aplikasi parkir menggunakan kembali aktivitas adaptif yang ada, masih ada pedoman kualitas khusus mobil yang harus Anda penuhi, mulai dari deklarasi manifes dan potongan layar hingga menjeda pemutaran saat mobil mulai bergerak.
Dan untuk membantu mengotomatiskan pekerjaan tersebut, kami telah meluncurkan keahlian Android baru untuk aplikasi yang diparkir.
Jadi, sebelum memulai, pastikan Anda telah menginstal Android CLI, dan Anda dapat menemukannya dari link singkat ini.
Kemudian, setelah Anda menyiapkannya, jalankan android skills list untuk mempelajari keterampilan yang tersedia.
android skills list
android skills add android-for-cars-parked-appsAda banyak sekali keterampilan berbeda yang dapat Anda gunakan untuk meningkatkan pengembangan Android Anda ke level berikutnya.
Kemudian, khusus untuk Android untuk mobil, Anda dapat menggunakan android skills add android-for-cars-parked-apps untuk menambahkan kemampuan ke konteks agen Anda.
Sekarang, apa pun agen AI favorit Anda, agen tersebut akan memberi Anda panduan langkah demi langkah untuk mengonfigurasi manifes untuk Android Auto atau Android Automotive OS, menangani inset jendela mobil dan hal-hal seperti navigasi kembali, menerapkan batasan pemutaran gangguan bagi pengemudi, dan bahkan dapat mengaudit aplikasi video, game, atau browser Anda sebelum Anda mengirimkannya ke Google Play.
Jadi, membuat aplikasi untuk mobil juga sedikit unik karena adanya konsep kategori aplikasi ini.
Seperti yang saya sebutkan sebelumnya, ada kategori aplikasi tertentu yang dapat digunakan saat mengemudi, dan ada kategori aplikasi lain yang dapat digunakan saat parkir.
Kategori yang ditandai ini adalah kategori yang dapat digunakan saat mengemudi.
Beberapa di antaranya ditandai dengan CAL, seperti yang saya sebutkan, ini adalah Library Aplikasi Mobil, dan aplikasi dalam kategori ini menggunakan template seperti yang kita lihat beberapa saat yang lalu.
Sekarang, mari kita bahas ini dengan cepat, saya tidak akan membahasnya secara mendetail.
Dimulai dengan aplikasi media, sekarang aplikasi ini memutar audio, bukan video.
Ada dua cara untuk membuatnya.
Yang ada di bagian atas ini, yang ditandai dengan MediaBrowserService, adalah opsi yang paling sederhana.
Yang Anda lakukan adalah menyediakan metadata, sedangkan antarmuka layar infotainment sepenuhnya menangani rendering UI pemutaran dan browser media dengan cara yang dioptimalkan untuk mobil.
Opsi lainnya adalah mem-build aplikasi media menggunakan Library Aplikasi Mobil, yang memberi Anda lebih banyak kontrol dan opsi untuk menyesuaikan gaya dan tampilan aplikasi media Anda, dan Thomas akan menunjukkan lebih banyak hal tentang hal itu sebentar lagi.
Aplikasi navigasi tentu saja merupakan kasus penggunaan utama, yang menyediakan rute dan rute belokan demi belokan.
Aplikasi pengemudi transportasi online juga termasuk dalam kategori ini.
Aplikasi lokasi menarik membantu Anda menemukan akses ke lokasi bermanfaat di sekitar, seperti pengisi daya kendaraan listrik atau tempat parkir.
Aplikasi Internet of Things atau IoT memungkinkan Anda mengakses perangkat smart di mana saja, misalnya, pengelolaan rumah.
Aplikasi cuaca juga tersedia, dan dapat melakukan hal-hal seperti memberikan radar real-time, peringatan badai, dan prakiraan cuaca spesifik per lokasi.
Terakhir, komunikasi dibagi menjadi tiga subkategori: memperluas notifikasi dasar ke mobil, atau aplikasi pesan dan panggilan video.
Lalu, ada kategori yang diparkir: aplikasi streaming video, game, dan browser web.
Kami juga dengan senang hati mengumumkan bahwa sejak beberapa minggu yang lalu, semua developer dapat memublikasikan game di Android Auto dan Android Automotive OS.
Anda akan melihat bahwa beberapa kategori ini bertuliskan Terbuka, yang lain bertuliskan Dalam Versi Beta, dan yang lainnya bertuliskan Segera Hadir.
Terbuka berarti developer mana pun dapat mengirimkan aplikasi dalam kategori ini langsung ke produksi.
Beta berarti meskipun Anda dapat memublikasikan ke jalur internal atau tertutup, aplikasi tidak dapat dipublikasikan ke produksi kecuali jika Anda diterima sebagai bagian dari program akses awal.
Dokumentasi untuk setiap kategori ini mencakup informasi selengkapnya dan link ke formulir minat kami.
Lalu, Segera Hadir adalah untuk kategori yang saat ini tidak didukung, tetapi kami berencana untuk mendukungnya pada masa mendatang.
Pada akhirnya, sasaran kami adalah menyatukan platform.
Kami ingin Anda dapat membangun dan mendapatkan jangkauan maksimal dengan menulis sekali dan mendistribusikan ke Android Auto dan Android Automotive OS, apa pun kategorinya.
Sekarang, mari kita beralih ke Thomas untuk membahas media.
Terima kasih.
Bagus.
Jadi, tahun lalu kami memperkenalkan Library Aplikasi Mobil untuk aplikasi media di versi 1.8, yang menghadirkan UI penjelajahan dengan template dan tindakan kustom ke Android Auto.
Hal ini mencakup template pemutaran media yang terlihat di sebelah kiri.
Tahun ini di I/O, kami memperkenalkan lebih banyak UI yang dapat dijelajahi melalui Library Aplikasi Mobil 1.9.
Jadi, dengan CAL 1.9 yang mencapai versi Beta, Anda kini dapat mengakses update fitur utama di Auto dan Automotive OS.
Sorotan mencakup penyesuaian merek melalui ekspresi aplikasi, yang memungkinkan Anda menyesuaikan token warna dan bentuk dengan tata letak yang dirender host sekaligus mempertahankan aturan keamanan, bersama dengan komponen UI baru seperti bagian sorotan, item daftar ringkas, chip yang dapat di-scroll, dan mini-player persisten.
Selain itu, CAL 1.9 memperluas dukungan template media sepenuhnya ke AAOS, sehingga mendorong penyatuan platform yang sebenarnya di kedua ekosistem.
Iterasi berikutnya pada Library Aplikasi Mobil akan segera hadir: CAL versi 10.
CAL versi 10 akan menghadirkan lebih banyak template kustom untuk aplikasi komunikasi, sehingga memberikan pengalaman panggilan yang lebih andal dan kustom saat mengemudi.
Kami juga menyertakan kategori aplikasi baru, dan template untuk aplikasi, yang menampilkan pengalaman percakapan saat mengemudi.
Terakhir, kami sedang mengembangkan lebih banyak fungsi untuk transisi yang lebih lancar dari mode parkir ke mode mengemudi dengan template Library Aplikasi Mobil.
Nantikan informasi selengkapnya dalam waktu dekat.
Kemampuan parkir-ke-berkendara menggunakan Library Aplikasi Mobil memungkinkan aplikasi Anda beralih mode secara dinamis dan menampilkan konten adaptif saat tidak bergerak, serta beralih kembali ke template Library Aplikasi Mobil dengan lancar saat berkendara.
Aplikasi utama mencakup penawaran alur autentikasi yang disesuaikan saat Anda tidak bergerak, atau mengaktifkan pengalaman parkir khusus saat Anda, seperti streaming podcast video atau klip musik.
Fitur ini terintegrasi langsung dengan template pemutaran media.
Jadi, kendaraan yang tidak bergerak memberi pengemudi akses penuh ke aktivitas Android native aplikasi Anda, sehingga memungkinkan multimedia seperti streaming video.
Segera setelah mobil mulai berjalan, pengaman terhadap gangguan akan diaktifkan, sehingga aplikasi Anda akan beralih kembali ke template media Koleksi aplikasi Mobil untuk mempertahankan pemutaran audio yang sesuai dan tanpa gangguan.
Kita berada di momen transformatif untuk pengalaman di dalam mobil.
Aplikasi media ingin berkembang melampaui antarmuka penjelajahan dan pemutaran tradisional untuk memberikan momen yang lebih beragam, imersif, dan interaktif bagi pengemudi dan penumpang.
Sekarang, kita akan membahas contoh cara menambahkan aktivitas video native menggunakan library Media3 untuk mulai diputar saat mobil beralih ke mode parkir.
Jadi, untuk memulai, Anda akan menghubungkan platform rendering video langsung ke instance pemutaran latar belakang.
override fun onStart() {
super.onStart()
...
controllerFuture = MediaController.Builder(
this,
sessionToken
).buildAsync()
controllerFuture?.addListener({
mediaController = controllerFuture?.get()
playerView.player = mediaController
}, ContextCompat.getMainExecutor(this))
}Anda ingin menghindari pembuatan instance pemutar media terpisah di dalam aktivitas ini, tetapi ingin mempertahankan ExoPlayer atau pemutar media pusat dalam layanan utama, seperti layanan galeri media Media3, yang menangani kombinasi streaming audio dan video.
Jadi, selama bergerak, saat tidak ada layanan aktif yang terikat, pemutar hanya akan mendekode audio, tetapi saat pengemudi membuka aktivitas video Anda saat parkir, Anda dapat langsung memasang platform rendering-nya ke pemutar layanan yang mendasarinya.
Jadi, dengan menggunakan Media3, mediaController mengimplementasikan pemutar secara native, sehingga memungkinkan penetapan langsung, seperti yang Anda lihat di sini, playerView ditetapkan-- playerView.player ditetapkan langsung ke mediaController.
Jadi, selanjutnya, Anda perlu mendaftarkan titik entri native menggunakan ParkedOnlyOnClickListener.
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()Wrapper ini menyediakan pemicu intent dalam panel header antarmuka pemutaran media Anda.
Jadi, sertakan tindakan untuk meluncurkan pemutaran video, dengan menggabungkan pemroses pilihannya dalam ParkedOnlyOnClickListener.
Jadi, dalam mode mengemudi, ketukan ini dicegat oleh aplikasi host, yang menampilkan pesan keselamatan sistem, sehingga Anda tidak akan dapat membuka layar tersebut saat mengemudi, tetapi saat Anda parkir, callback akan memicu startActivity dalam carContext untuk meluncurkan aktivitas layar penuh yang ditentukan.
Ingat, di aplikasi Koleksi aplikasi Mobil ini, Anda harus menandai target video sebagai distractionOptimized=false di dalam manifes agar sistem operasi mengenali bahwa ini hanya alur kerja saat parkir.
<activity
android:name=".VideoPlayerActivity"
android:exported="false"
android:launchMode="singleTop">
<meta-data
android:name="distractionOptimized"
android:value="false" />
</activity>Terakhir, mari kita lihat apa yang terjadi saat pengemudi beralih dari mode parkir ke mode berkendara.
Jika aktivitas tidak dioptimalkan untuk distraksi, dan tetap aktif saat mobil bergerak, AAOS akan menampilkan overlay pemblokiran sistem yang memberi tahu Anda untuk memarkir mobil agar dapat terus menggunakan aplikasi.
Untuk menghindari layar yang diblokir ini, sasaran kami adalah kembali ke template pemutaran media dengan lancar tanpa mengganggu audio.
Jadi, saat isRequiresDistractionOptimization bernilai benar di sini, kita pada dasarnya akan menghapus render platform rendering video dari sesi media yang mendasarinya dan memanggil finish pada aktivitas pemutar karena diluncurkan di atas pengalaman CAL, dan menyelesaikannya akan langsung kembali ke template pemutaran media dan melanjutkan pemutaran audio tersebut.
class VideoPlayerActivity : ComponentActivity(){
override fun onStart() {
…
if (uxRestrictionsManager?
.currentCarUxRestrictions?
.isRequiresDistractionOptimization
== true) {
revertToCarAppTemplate()
}
}
private fun revertToCarAppTemplate() {
mediaControllerCompat
.sendCommand("CMD_CLEAR_VIDEO_SURFACE",
null, null)
finish()
}
}Mempertahankan pemutaran audio tanpa gangguan adalah kunci untuk memberikan pengalaman pengguna yang luar biasa. Jadi, dengan menjaga sesi media Anda tetap aktif sebagai layanan latar depan, suara akan terus berlanjut dengan lancar di seluruh perubahan status ini.
<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>Anda juga harus mengganti onNewIntent di layar CAL untuk menangkap intent SHOW_MEDIA_PLAYBACK.
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)
}
}Dengan demikian, setiap kali pengguna berinteraksi dengan widget media sistem kendaraan yang ada di layar utama mobil, deep link akan mengarahkan mereka langsung ke tampilan sedang diputar di Library Aplikasi Mobil.
Jadi, memvalidasi transisi ini di sepanjang proses pengembangan sangatlah mudah.
Anda dapat menjalankan perintah adb di AAOS.
Untuk kasus ini, nilainya akan menjadi emulate-driving-state drive atau emulate-driving-state park saat Anda siap untuk beralih kembali di antara aktivitas.
Berikut contoh penggunaan aplikasi media Media3 contoh baru kami yang menggunakan Library Aplikasi Mobil dengan pemutaran video parkir untuk mengemudi.
Jadi, lihat ini di stan Android adaptif kami di lantai bawah dan di GitHub car-samples kami segera.
Kemampuan parkir-ke-berkendara saat ini tersedia di Android Automotive OS untuk aplikasi media yang telah terintegrasi dengan CAL mobil untuk pengalaman berkendara, sehingga kini mereka dapat menawarkan pengalaman yang lebih lengkap saat parkir.
Lihat dokumentasi kami segera di developer.android.com dan nyatakan minat Anda di sana untuk menampilkan fitur ini di aplikasi Anda.
Paul.
Bagus.
Terima kasih, Thomas.
Sebelum kita mengakhiri, saya memiliki beberapa cara untuk dibagikan kepada Anda agar dapat mempelajari lebih lanjut apa yang akan hadir pada akhir tahun ini.
Seperti yang disebutkan Thomas, CAL 1.9 saat ini dalam versi alfa.
Fitur ini akan segera beralih ke versi beta.
Kemudian, CAL 1.10 akan memasuki versi alfa sebelum akhir tahun, sehingga Anda dapat mulai mengevaluasi UI percakapan serta kemampuan komunikasi dan parkir-untuk-berkendara terbaru.
Terakhir, kami sangat senang untuk menyampaikan, seperti yang saya sebutkan, bahwa game tersedia di Android Auto dan Android Automotive OS, jadi ini adalah waktu yang tepat untuk mengoptimalkan judul game Anda untuk mobil.
Untuk mempelajari lebih lanjut detail implementasi, pastikan untuk meninjau dokumentasi dalam panduan "Membuat game untuk mobil".
Anda dapat mempelajari lebih lanjut cara menyesuaikan game untuk mobil dan terus mengikuti hal-hal baru dan perubahan lainnya pada Android untuk mobil di halaman "Yang baru".
Kami harap Anda telah melihat bagaimana mobil dan penggunanya siap untuk aplikasi Anda.
Anda dapat membangun aplikasi adaptif yang sudah ada untuk pengalaman parkir yang kaya, dan menggunakan berbagai template Koleksi aplikasi Mobil untuk membuat pengalaman yang dioptimalkan untuk mengemudi dengan aman.
Sebelum memublikasikan, Anda dapat menguji secara menyeluruh menggunakan Desktop Head Unit, emulator, AAOS yang berjalan di Pixel Tablet, atau menggunakan Firebase Test Lab.
Anda sudah memiliki keterampilan untuk membangun ekosistem ini dan jutaan mobil menunggu aplikasi Anda, jadi mari kita luncurkan aplikasi tersebut.
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)
}
}