Saat mendistribusikan aplikasi ke perangkat Android Automotive OS, ada beberapa pertimbangan unik untuk faktor bentuk yang harus Anda ketahui. Panduan ini menjelaskan pertimbangan tersebut.
Menguji aplikasi yang ada di emulator Android Automotive OS
Untuk mulai membangun aplikasi untuk Android Automotive OS, uji terlebih dahulu aplikasi seluler yang ada di emulator Android Automotive OS. Untuk menyiapkan emulator, ikuti langkah-langkah di Pengujian menggunakan emulator Android Automotive OS. Selanjutnya, Anda dapat menjalankan aplikasi dengan mengikuti petunjuk di Menjalankan aplikasi di emulator.
Saat menjalankan aplikasi, perhatikan masalah kompatibilitas, seperti berikut:
- Layar infotainment memiliki orientasi tetap. Untuk memenuhi pedoman kualitas aplikasi mobil, aplikasi harus mendukung orientasi potret dan lanskap.
- API yang tersedia pada perangkat lain mungkin tidak tersedia di Android Automotive OS. Misalnya, beberapa API layanan Google Play tidak tersedia di Android Automotive OS. Lihat bagian Menonaktifkan fitur untuk mengetahui detail tentang cara menangani masalah ini.
Mengonfigurasi file manifes aplikasi
Untuk menargetkan perangkat Android Automotive OS, aplikasi Anda harus memiliki entri manifes tertentu. Setelah Anda memilih untuk mendistribusikan ke perangkat Android Automotive OS, aplikasi yang kompatibel akan menjalani proses peninjauan manual untuk membantu memastikan aplikasi tersebut aman digunakan di dalam mobil. Lihat Mendistribusikan ke mobil untuk mengetahui detail selengkapnya.
Fitur Android Automotive OS yang diperlukan
Semua aplikasi yang di-build untuk Android Automotive OS harus memenuhi persyaratan tertentu agar dapat didistribusikan menggunakan Google Play. Lihat Memenuhi persyaratan fitur Google Play untuk informasi selengkapnya.
Entri manifes khusus kategori
Selain persyaratan sebelumnya, yang berlaku untuk semua aplikasi yang diparkir, kategori video dan game memiliki persyaratan tambahan:
- Untuk aplikasi video, lihat Menandai aplikasi sebagai aplikasi video.
- Untuk game, lihat Menandai aplikasi Anda sebagai game.
Memenuhi persyaratan gangguan bagi pengemudi
Menghindari gangguan pengemudi sangat penting saat menghadirkan aplikasi ke mobil. Untuk
aplikasi yang diparkir, hal ini terutama dilakukan dengan mencegah aplikasi Anda
digunakan atau memutar audio saat batasan pengalaman pengguna (UX)
aktif, seperti yang dicatat oleh pedoman kualitas DD-2
dan
DD-3
.
Mencegah penggunaan saat batasan pengalaman pengguna aktif
Secara default, aktivitas tidak dapat digunakan atau diluncurkan saat pembatasan UX
aktif. Untuk memastikan perilaku ini berlaku untuk aplikasi Anda, aplikasi tidak boleh menyertakan
elemen <meta-data>
berikut dalam
elemen <activity>
dalam
manifes Anda:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Jika aktivitas di aplikasi Anda Dijeda saat batasan UX menjadi aktif, aktivitas tersebut akan disamarkan oleh aktivitas yang dimiliki oleh OS.
Minimal, aktivitas aplikasi Anda akan bertransisi ke
status siklus proses Paused. Hal ini terjadi sebagai callback siklus proses
onPause()
, yang selama itu Anda harus menjeda pemutaran video dan audio dari
aplikasi Anda.
Di perangkat yang menyertakan mode kompatibilitas Android Automotive OS, pemblokiran sistem menyebabkan aktivitas aplikasi Anda bertransisi melalui status Dijeda ke status Dihentikan.
Menghentikan pemutaran dan mencegah kelanjutan pemutaran
Untuk beberapa aplikasi, menjeda pemutaran selama onPause()
dan melacak status untuk
mencegah kelanjutan pemutaran hingga onResume()
sudah cukup untuk memenuhi persyaratan
gangguan pengemudi.
Jika bereaksi terhadap callback siklus proses tidak cukup untuk aplikasi Anda, Anda dapat memproses status batasan UX secara langsung seperti yang dijelaskan di bagian berikut. Misalnya, aplikasi yang mendukung picture-in-picture mungkin lebih memilih untuk memproses secara langsung, bukan memiliki pemeriksaan bersyarat dalam callback siklus proses.
Memahami batasan pengalaman pengguna
Untuk memproses batasan UX, tambahkan dependensi pada
library android.car
terlebih dahulu di file build.gradle
modul aplikasi Anda.
Ini adalah ekstensi untuk Android SDK yang menyediakan API yang khusus untuk
Android Automotive OS.
android {
...
useLibrary("android.car")
}
Gunakan CarUxRestrictionsManager
untuk membaca status pembatasan UX. Jangan
mencoba menentukan status pembatasan UX dari status hardware lainnya
seperti gigi atau kecepatan, karena pembatasan UX dapat bervariasi dari layar ke layar
dalam kendaraan.
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()
Satu-satunya nilai yang disediakan oleh CarUxRestrictions
yang harus direferensikan oleh aplikasi Anda
adalah nilai yang ditampilkan dari isRequiresDistractionOptimization()
. Nilai lainnya
hanya relevan untuk aktivitas yang ditandai sebagai dioptimalkan untuk gangguan.
Menguji implementasi Anda
Validasi bahwa aplikasi Anda memenuhi persyaratan gangguan pengemudi menggunakan prosedur berikut:
- Instal aplikasi Anda di image sistem tanpa Google Play Store atau mode Kompatibilitas.
- Dengan petak aplikasi peluncur terbuka, simulasikan mengemudi dan verifikasi bahwa aplikasi Anda tidak dapat dibuka.
- Berhenti menyimulasikan mengemudi dan buka aplikasi Anda ke layar pemutaran, lalu mulai pemutaran.
- Simulasikan mengemudi lagi dan pastikan pemutaran dijeda.
- Jika aplikasi Anda mendukung integrasi dengan
MediaSession
, gunakanadb shell cmd media_session dispatch play
dan pastikan pemutaran tidak dilanjutkan.
- Jika aplikasi Anda mendukung integrasi dengan
Mengoptimalkan aplikasi untuk Android Automotive OS
Untuk memberi pengguna pengalaman terbaik di mobil, perhatikan hal-hal berikut saat mem-build aplikasi untuk Android Automotive OS:
Menggunakan inset jendela dan potongan layar
Seperti faktor bentuk lainnya, Android Automotive OS menyertakan elemen UI sistem, seperti status dan menu navigasi, serta dukungan untuk layar non-persegi panjang.
Secara default, aplikasi menggambar di area yang tidak tumpang-tindih dengan panel sistem atau potongan layar. Namun, Anda mungkin ingin aplikasi menyembunyikan panel sistem, menggambar konten di belakangnya, atau menampilkan konten dalam potongan tampilan seperti yang dijelaskan di Menata letak aplikasi dalam inset jendela. Jika aplikasi Anda melakukan salah satu hal ini, lihat subbagian berikut untuk mengetahui detail tentang cara membuat aplikasi Anda berfungsi dengan baik di seluruh ekosistem perangkat Android Automotive OS.
Kolom sistem, mode imersif, dan rendering dari tepi ke tepi
Panel sistem di mobil dapat berukuran dan diposisikan secara berbeda dengan faktor bentuk lainnya. Misalnya, menu navigasi dapat diposisikan di sebelah kiri, kanan, atau bawah layar. Meskipun ada status bar di bagian atas dan menu navigasi di bagian bawah (seperti pada sebagian besar ponsel dan tablet), ukuran elemen ini kemungkinan akan jauh lebih besar di mobil.
Selain itu, Android Automotive OS memungkinkan OEM mengontrol apakah
aplikasi dapat menampilkan atau menyembunyikan panel sistem untuk masuk dan keluar dari mode
imersif. Misalnya, dengan mencegah aplikasi
menyembunyikan kolom sistem, OEM dapat memastikan bahwa kontrol kendaraan, seperti kontrol
kondisi udara, selalu dapat diakses di layar. Jika OEM telah mencegah aplikasi
mengontrol panel sistem, tidak ada yang terjadi saat aplikasi memanggil
API
WindowInsetsController
(atau WindowInsetsControllerCompat
)
untuk menampilkan atau menyembunyikan panel sistem. Lihat dokumentasi show
dan
hide
untuk mempelajari lebih lanjut cara mendeteksi apakah aplikasi Anda dapat mengubah
inset.
Demikian pula, OEM juga dapat mengontrol apakah aplikasi dapat menetapkan warna dan transparansi panel sistem atau tidak untuk memastikan bahwa panel dan elemen yang ada di dalamnya terlihat jelas setiap saat. Jika aplikasi Anda menggambar dari tepi ke tepi, pastikan hanya konten non-penting yang digambar di belakang kolom sistem. Konten ini mungkin tidak terlihat jika OEM perangkat mencegah setelan warna atau transparansi panel.
<!-- 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>
Jika aplikasi Anda menggunakan layar penuh, jangan membuat asumsi tentang ukuran, jumlah, jenis, atau lokasi panel sistem. Sebagai gantinya, gunakan API inset jendela untuk menata konten aplikasi Anda relatif terhadap panel sistem. Lihat Menampilkan konten layar penuh di aplikasi Anda untuk mengetahui detail selengkapnya tentang cara menggunakan API ini. Nilai padding hardcode tidak pernah direkomendasikan untuk faktor bentuk apa pun, tetapi di mobil, nilai tersebut kemungkinan tidak akan berfungsi untuk mempertahankan konten di area aman.
Menyesuaikan dengan layar berbentuk tidak beraturan
Selain layar persegi panjang, beberapa kendaraan mungkin memiliki layar berbentuk tidak beraturan, seperti yang ditunjukkan pada Gambar 1:

Jika aplikasi tidak merender dari tepi ke tepi, Anda tidak perlu melakukan apa pun agar merender dalam area aman.
Jika aplikasi merender layar penuh, Anda dapat memilih perilaku aplikasi
terkait potongan tampilan. Anda dapat melakukannya menggunakan resource
dengan menetapkan
atribut
android:windowLayoutInDisplayCutoutMode
untuk tema aplikasi atau saat runtime
dengan mengubah atribut
layoutInDisplayCutoutMode
jendela.
Karena jenis potongan tampilan yang ada di perangkat Android Automotive OS
berbeda dengan yang ada di perangkat seluler, jangan gunakan
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
atau LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
,
yang memiliki perilaku yang dioptimalkan untuk potongan yang ditemukan di perangkat seluler. Sebagai gantinya,
gunakan LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
atau LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
untuk selalu menghindari atau selalu memasuki potongan. Saat memilih yang terakhir,
lihat Mendukung potongan layar untuk mengetahui detail
selengkapnya tentang API yang terkait dengan potongan layar.
Jika aplikasi Anda dirender ke area potongan layar dan Anda ingin memiliki perilaku yang berbeda antara Android Automotive OS dan perangkat seluler, lihat Menonaktifkan fitur untuk mendapatkan panduan jika aplikasi Anda menetapkan perilaku ini saat runtime dan Menggunakan resource alternatif jika aplikasi Anda menetapkan perilaku ini menggunakan file resource.
Menonaktifkan fitur
Jika Anda menyediakan aplikasi seluler di Android Automotive OS, fitur dan fungsi tertentu mungkin tidak relevan atau tidak tersedia. Misalnya, mobil biasanya tidak menyediakan akses ke kamera. Selain itu, hanya sebagian layanan Google Play yang tersedia di Android Automotive OS; lihat Layanan Google Play untuk mobil untuk detail selengkapnya.
Anda dapat menggunakan PackageManager.hasSystemFeature
API untuk mendeteksi apakah aplikasi berjalan di Android Automotive OS dengan memeriksa
fitur FEATURE_AUTOMOTIVE
,
seperti ditunjukkan pada contoh berikut:
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 }
Atau, jika aplikasi Anda juga memiliki komponen Android Auto, Anda dapat
menggunakan CarConnection
API dari
Library Aplikasi Android untuk Mobil untuk mendeteksi apakah aplikasi
berjalan di Android Automotive OS atau Android Auto—atau apakah aplikasi tidak terhubung
ke mobil sama sekali.
Untuk Picture-in-Picture (PiP), ikuti praktik terbaik yang telah ditetapkan untuk memeriksa apakah fitur ini tersedia dan bereaksi dengan tepat.
Menangani skenario offline
Meskipun mobil menjadi lebih banyak terhubung ke internet, aplikasi direkomendasikan untuk menangani operasi tanpa koneksi internet, seperti dalam kasus berikut:
- Pengguna dapat memilih untuk tidak menggunakan data seluler yang ditawarkan sebagai bagian dari paket langganan dari produsen mobil.
- Akses ke data seluler mungkin dibatasi di area tertentu.
- Mobil dengan radio Wi-Fi mungkin berada di luar jangkauan Wi-Fi, atau OEM mungkin menonaktifkan Wi-Fi dan mengutamakan jaringan seluler.
Bersiaplah untuk menangani skenario ini di aplikasi Anda dengan melakukan degradasi halus pada fungsi yang bergantung pada akses internet, misalnya dengan menawarkan konten offline. Untuk mengetahui informasi selengkapnya, lihat praktik terbaik untuk mengoptimalkan jaringan.
Menggunakan resource alternatif
Guna membantu menyesuaikan aplikasi untuk mobil, Anda dapat menggunakan penentu resource car
untuk menyediakan
resource alternatif
saat berjalan di kendaraan Android Automotive OS Google. Misalnya, jika menggunakan
Resource dimensi untuk menyimpan
nilai padding, Anda dapat menggunakan nilai yang lebih besar bagi set resource car
untuk membuat
target sentuh lebih besar.