Membuat aplikasi parkir untuk Android Automotive OS

Selain mendukung aplikasi yang dibangun untuk digunakan saat mengemudi, Android Automotive OS mendukung aplikasi browser, game, dan video untuk digunakan saat parkir. Anda dapat mengirimkan aplikasi yang sama ke mobil, seperti yang Anda lakukan ke perangkat layar besar lainnya, hanya dengan beberapa perubahan kecil.

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 Anda

Untuk menargetkan Android Automotive OS, aplikasi Anda harus memiliki entri manifes tertentu. Dengan entri tersebut, aplikasi yang menargetkan Android Automotive OS akan dikirimkan ke Play Store menggunakan jenis rilis Automotive OS yang berbeda. Aplikasi tersebut akan menjalani proses peninjauan manual untuk membantu memastikannya aman digunakan di dalam mobil. Lihat Mendistribusikan aplikasi Android untuk mobil untuk mengetahui detail selengkapnya.

Fitur Android Automotive OS yang diperlukan

Agar muncul sebagai listingan di Play Store di mobil, aplikasi yang dibangun untuk Android Automotive OS harus menyertakan elemen <uses-feature> berikut di file AndroidManifest.xml:

<manifest ...>
    ...
    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    ...
</manifest>

Aplikasi yang dikirim ke jalur non-otomotif tidak dapat mendeklarasikan elemen <uses-feature> yang ditampilkan dalam contoh kode sebelumnya karena tidak dapat bergantung pada hardware khusus mobil. Jadi, untuk mengirimkan aplikasi yang sama bagi perangkat otomotif maupun non-otomotif, Anda harus membuat minimal dua ragam dari aplikasi Anda: satu untuk perangkat otomotif dan satu untuk perangkat seluler. Untuk mengetahui informasi selengkapnya tentang cara membuat ragam terpisah ini, lihat dokumentasi berikut:

Kedua ragam aplikasi dapat memiliki nama paket yang sama, tetapi harus memiliki kode versi yang berbeda karena akan diupload ke jalur Play Store secara terpisah.

Atau, daripada menggunakan ragam terpisah, Anda dapat menggunakan nama paket terpisah untuk APK atau App Bundle seluler dan otomotif. Untuk memahami konsekuensi setiap pendekatan, lihat Nama paket dalam panduan developer aplikasi media.

Selain elemen yang ditampilkan dalam contoh kode sebelumnya, aplikasi yang dibangun untuk Android Automotive OS harus menyertakan elemen <uses-feature> berikut di elemen <manifest> root:

<uses-feature
  android:name="android.hardware.wifi"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.portrait"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.landscape"
  android:required="false"/>

Menyetel fitur ini secara eksplisit ke tidak wajib akan membantu memastikan aplikasi Anda tidak bentrok dengan fitur hardware yang tersedia di perangkat Android Automotive OS.

Memastikan tidak ada aktivitas distraksi dioptimalkan

Untuk memastikan aplikasi Anda hanya tersedia untuk digunakan saat parkir, jangan sertakan elemen <meta-data> berikut dalam elemen <activity> dalam manifes Anda:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Tanpa metadata ini, aktivitas aplikasi Anda akan diblokir secara otomatis oleh OS saat mobil memasuki mode mengemudi untuk mengurangi gangguan bagi pengemudi. Hal ini terjadi sebagai callback siklus proses onPause dan selama itu Anda harus menjeda pemutaran video dan audio dari aplikasi Anda.

Entri manifes khusus kategori

Selain persyaratan sebelumnya, yang berlaku untuk semua aplikasi parkir, kategori video dan game memiliki persyaratan tambahan:

Mengoptimalkan aplikasi untuk Android Automotive OS

Untuk memberi pengguna pengalaman terbaik, perhatikan hal-hal berikut saat membangun aplikasi untuk Android Automotive OS.

Mengoptimalkan aplikasi untuk layar besar

Layar yang ada di kendaraan Android Automotive OS memiliki ukuran, resolusi, dan rasio aspek yang mirip dengan tablet dan perangkat foldable dibandingkan dengan ponsel. Dengan demikian, mengoptimalkan aplikasi untuk perangkat layar besar juga akan menguntungkan pengguna di mobil.

Secara khusus, lihat panduan Mendukung berbagai ukuran layar dan Memigrasikan UI ke tata letak responsif untuk mengetahui detail tentang cara mengoptimalkan ukuran layar besar, serta galeri media dan game untuk mendapatkan inspirasi dan panduan desain.

Pengoptimalan layar besar lainnya seperti kompatibilitas input tidak bermanfaat secara langsung untuk Android Automotive OS, tetapi tetap dapat meningkatkan pengalaman pengguna. Misalnya, navigasi keyboard menggunakan API yang sama seperti navigasi putar, sehingga setiap pengoptimalan yang dibuat di sana dapat menguntungkan kedua faktor bentuk.

Menggunakan inset jendela dan potongan layar

Seperti faktor bentuk lainnya, Android Automotive OS menyertakan UI sistem elemen, seperti status bar dan menu navigasi, serta dukungan untuk elemen layar.

Secara default, aplikasi menggambar di area yang tidak tumpang-tindih dengan kolom sistem atau potongan layar. Namun, Anda mungkin ingin aplikasi Anda menyembunyikan bilah sistem, gambar konten di belakangnya, atau tampilkan konten di potongan layar seperti yang dijelaskan di Menempatkan aplikasi dalam inset jendela. Jika aplikasi Anda melakukan salah satu dari hal ini, lihat subbagian berikut untuk detail tentang cara membuat aplikasi Anda berfungsi dengan baik di seluruh ekosistem Android Automotive OS perangkat.

Kolom sistem, mode imersif, dan rendering tepi-ke-tepi

Bilah sistem di mobil mungkin diubah ukurannya dan diposisikan berbeda dari yang lain {i>form factor<i} (faktor bentuk). Misalnya, bilah navigasi dapat diposisikan di sebelah kiri, kanan, atau bawah layar. Bahkan jika ada bilah status di atas dan bilah navigasi di bagian bawah (seperti halnya pada kebanyakan 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 kolom sistem untuk masuk dan keluar dari mode imersif mode. Misalnya, dengan mencegah aplikasi dengan menyembunyikan kolom sistem, OEM dapat memastikan bahwa kontrol kendaraan, seperti tetap dapat diakses di layar. Jika OEM telah mencegah aplikasi mengontrol bilah sistem, tidak ada yang terjadi ketika aplikasi memanggil WindowInsetsController (atau WindowInsetsControllerCompat) API untuk menampilkan atau menyembunyikan kolom sistem. Lihat dokumentasi show dan hide untuk mempelajari lebih lanjut cara mendeteksi apakah aplikasi Anda dapat memodifikasi inset.

Demikian pula, OEM juga dapat mengontrol apakah aplikasi dapat menyetel warna dan tembus pandang bilah sistem untuk memastikan bahwa batang dan elemen yang terdapat di dalamnya selalu terlihat jelas. Jika aplikasi Anda menggambar dari tepi ke tepi, pastikan hanya konten yang tidak penting yang digambar di belakang kolom sistem. Konten ini mungkin tidak terlihat jika OEM perangkat mencegah setelan warna atau tembus cahaya batangan.

<!-- 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 ditampilkan di layar penuh, jangan membuat asumsi tentang ukuran, angka, jenis, atau lokasi bilah sistem. Sebagai gantinya, gunakan API inset jendela untuk menata letak konten aplikasi Anda relatif terhadap kolom sistem. Lihat Menampilkan konten layar penuh di aplikasi Anda untuk mengetahui detail selengkapnya tentang cara menggunakan API ini. Nilai padding hard code yang, meski tidak pernah disarankan, mungkin menyimpan konten di area aman pada perangkat lain tidak akan ada di mobil.

Beradaptasi dengan layar yang berbentuk tidak teratur

Selain pajangan persegi panjang, beberapa kendaraan mungkin memiliki bentuk tidak teratur seperti yang ditunjukkan dalam Gambar 1:

Diagram perangkat Android Automotive OS dengan layar yang
      melengkung di sisi kanan.
Gambar 1: Perangkat Android Automotive OS dengan layar yang melengkung di sisi kanan. Area hijau adalah kotak aman yang tidak tumpang tindih dengan kotak pembatas potongan tampilan kurva.

Jika aplikasi tidak merender tata letak layar penuh, Anda tidak perlu melakukan apa pun untuk hal tersebut untuk merender dalam area aman.

Jika aplikasi merender layar penuh, Anda dapat memilih cara yang diinginkan berperilaku sehubungan dengan potongan layar. Anda dapat melakukannya dengan menggunakan dengan menetapkan android:windowLayoutInDisplayCutoutMode untuk tema aplikasi atau saat runtime dengan memodifikasi layoutInDisplayCutoutMode .

Karena jenis potongan layar ada pada perangkat Android Automotive OS berbeda dari yang ada di perangkat seluler, jangan gunakan LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT atau LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES, yang perilakunya dioptimalkan untuk potongan yang ditemukan di perangkat seluler. Sebagai gantinya, menggunakan LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER atau LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS untuk selalu menghindari atau selalu masuk ke dalam potongan. Ketika memilih yang terakhir, lihat Mendukung potongan layar untuk informasi selengkapnya detail tentang API yang terkait dengan potongan layar.

Jika aplikasi Anda dirender di area potongan layar dan Anda ingin perilaku yang berbeda antara Android Automotive OS dan seluler, lihat Nonaktifkan fitur untuk panduan jika aplikasi Anda menyetelnya perilaku saat runtime dan Gunakan resource alternatif jika aplikasi menyetel 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.

Mendistribusikan aplikasi

Setelah menguji aplikasi berdasarkan pedoman kualitas aplikasi mobil untuk kategorinya dan membuat build Android Automotive OS dengan perubahan yang diperlukan untuk kategorinya, Anda akan dapat memublikasikannya ke jalur faktor bentuk Automotive OS di Play Store. Lihat Mendistribusikan aplikasi Android untuk mobil guna mengetahui detail selengkapnya tentang proses publikasi.

Memberikan masukan tentang aplikasi parkir

Jika Anda mengalami masalah atau memiliki permintaan fitur saat mengembangkan aplikasi parkir untuk Android Automotive OS, Anda dapat melaporkannya menggunakan Issue Tracker Google. Pastikan untuk mengisi semua informasi yang diminta pada template masalah. Sebelum mengajukan masalah baru, periksa apakah masalah tersebut sudah dilaporkan dalam daftar masalah. Anda dapat berlangganan dan memberi suara untuk masalah dengan mengklik bintang untuk masalah di tracker. Untuk mengetahui informasi selengkapnya, lihat Berlangganan pada topik Masalah.

Melaporkan masalah baru