Android Automotive OS memungkinkan pengguna menginstal aplikasi di mobil. Supaya menjangkau pengguna di platform ini, Anda perlu mendistribusikan aplikasi yang dioptimalkan bagi pengemudi yang kompatibel dengan Android Automotive OS. Hampir semua kode dan resource di aplikasi Android Auto bisa Anda gunakan kembali, tetapi Anda harus membuat build terpisah yang memenuhi persyaratan di halaman ini.
Ringkasan pengembangan
Menambahkan dukungan Android Automotive OS hanya memerlukan beberapa langkah, seperti yang dijelaskan di bagian berikut ini:
- Mengaktifkan fitur otomotif di Android Studio
- Membuat modul otomotif.
- Memperbarui dependensi Gradle.
- Anda juga bisa Menerapkan aktivitas setelan dan login.
- Secara opsional, Baca petunjuk host media.
Pertimbangan desain
Android Automotive OS menangani tata letak konten media yang diterimanya dari layanan browser media aplikasi Anda. Artinya, aplikasi Anda tidak menggambar UI dan tidak memulai aktivitas apa pun saat pengguna memicu pemutaran media.
Jika Anda menerapkan aktivitas setelan atau login, aktivitas ini harus dioptimalkan untuk kendaraan. Baca Pedoman desain untuk Android Automotive OS saat mendesain area tersebut pada aplikasi Anda.
Menyiapkan project
Anda perlu menyiapkan berbagai bagian project aplikasi Anda untuk mengaktifkan dukungan Android Automotive OS.
Mengaktifkan fitur otomotif di Android Studio
Gunakan Android Studio 4.0 atau yang lebih tinggi untuk memastikan semua fitur Automotive OS diaktifkan.
Membuat modul otomotif
Beberapa komponen Android Automotive OS, seperti manifes, memiliki persyaratan khusus platform. Buat modul yang dapat menjaga keterpisahan kode untuk komponen-komponen ini dari kode lain dalam project Anda, seperti kode yang digunakan untuk aplikasi ponsel.
Ikuti langkah-langkah berikut untuk menambahkan modul otomotif ke project:
- Di Android Studio, klik File > New > New Module.
- Pilih Automotive Module, lalu klik Next.
- Masukkan Application/Library name. Nama ini akan dilihat pengguna aplikasi Anda di Android Automotive OS.
- Masukkan Module name.
- Sesuaikan Package name agar cocok dengan aplikasi Anda.
Pilih API 28: Android 9.0 (Pie) untuk Minimum SDK, lalu klik Next.
Semua mobil yang mendukung Android Automotive OS berjalan pada Android 9 (level API 28) atau yang lebih tinggi, jadi memilih nilai ini akan menargetkan semua mobil yang kompatibel.
Pilih No Activity, lalu klik Finish.
Setelah membuat modul di Android Studio, buka AndroidManifest.xml
pada
modul otomotif baru Anda:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.media">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" />
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
</manifest>
Elemen application
memiliki beberapa informasi aplikasi standar serta elemen
uses-feature
yang mendeklarasikan dukungan untuk Android Automotive OS. Perhatikan juga bahwa
tidak ada aktivitas yang dideklarasikan dalam manifes.
Jika Anda menerapkan aktivitas setelan dan login, tambahkan di sini. Aktivitas ini dipicu oleh sistem menggunakan intent eksplisit dan merupakan satu-satunya aktivitas yang Anda deklarasikan dalam manifes untuk aplikasi Android Automotive OS.
Setelah menambahkan aktivitas setelan dan login, lengkapi file manifes dengan
menyetel atribut android:appCategory="audio"
di elemen application
dan menambahkan elemen uses-feature
berikut:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.media"> <application android:allowBackup="true" android:appCategory="audio" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" /> <uses-feature android:name="android.hardware.type.automotive" android:required="true" /> <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" /> </manifest>
Menyetel fitur ini secara eksplisit ke required="false"
memastikan bahwa aplikasi Anda tidak
bentrok dengan fitur hardware yang tersedia di perangkat Automotive OS.
Mendeklarasikan dukungan media untuk Android Automotive OS
Gunakan entri manifes berikut untuk mendeklarasikan bahwa aplikasi Anda mendukung Android Automotive OS:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Entri manifes ini merujuk ke sebuah file XML yang mendeklarasikan kemampuan otomotif yang didukung aplikasi Anda.
Untuk menunjukkan bahwa Anda memiliki aplikasi media, tambahkan file XML dengan nama automotive_app_desc.xml
ke direktori res/xml/
di project Anda. Sertakan konten berikut dalam file ini:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Filter intent
Android Automotive OS menggunakan intent eksplisit untuk memicu aktivitas di aplikasi
media Anda. Jangan sertakan aktivitas apa pun yang memiliki
filter intent CATEGORY_LAUNCHER
atau ACTION_MAIN
dalam file manifes.
Aktivitas seperti dalam contoh berikut biasanya menargetkan ponsel atau jenis perangkat seluler lainnya. Deklarasikan aktivitas ini dalam modul yang membuat aplikasi ponsel, bukan dalam modul yang membuat aplikasi Android Automotive OS Anda.
<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>
Memperbarui dependensi Gradle Anda
Sebaiknya Anda menempatkan layanan browser media dalam modul terpisah yang Anda gunakan bersama dengan aplikasi ponsel dan modul otomotif. Jika menggunakan pendekatan ini, Anda harus memperbarui modul otomotif untuk menyertakan modul bersama, seperti yang ditampilkan dalam cuplikan berikut:
Groovy
buildscript { ... dependencies { ... implementation project(':shared_module_name') } }
Kotlin
buildscript { ... dependencies { ... implementation(project(":shared_module_name")) } }
Menerapkan aktivitas setelan dan login
Selain layanan browser media, Anda juga dapat menyediakan aktivitas setelan dan login yang dioptimalkan untuk kendaraan untuk aplikasi Android Automotive OS Anda. Aktivitas ini memungkinkan Anda menyediakan fungsi aplikasi yang tidak disertakan dalam API Android Media.
Hanya terapkan aktivitas ini jika aplikasi Android Automotive OS perlu mengizinkan pengguna login atau menentukan setelan aplikasi. Aktivitas ini tidak digunakan oleh Android Auto.
Alur kerja aktivitas
Diagram berikut menunjukkan cara pengguna berinteraksi dengan aktivitas setelan dan login Anda menggunakan Android Automotive OS:
Mencegah gangguan di aktivitas setelan dan login
Untuk memastikan setelan dan/atau aktivitas login Anda hanya tersedia untuk digunakan
saat kendaraan pengguna diparkir, pastikan elemen <activity>
tidak menyertakan elemen <meta-data>
berikut. Aplikasi Anda akan ditolak
selama peninjauan jika elemen tersebut ada.
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Menambahkan aktivitas setelan
Anda dapat menambahkan aktivitas setelan yang dioptimalkan untuk kendaraan sehingga pengguna dapat mengonfigurasi setelan untuk aplikasi Anda di mobil mereka. Aktivitas setelan juga dapat menyediakan alur kerja lain, seperti login atau logout dari akun pengguna atau beralih akun pengguna. Ingat bahwa aktivitas ini hanya dipicu oleh aplikasi yang berjalan di Android Automotive OS. Aplikasi ponsel yang terhubung ke Android Auto tidak menggunakannya.
Mendeklarasikan aktivitas setelan
Anda harus mendeklarasikan aktivitas setelan dalam file manifes aplikasi, seperti ditunjukkan dalam cuplikan kode berikut:
<application>
...
<activity android:name=".AppSettingsActivity"
android:exported="true"
android:theme="@style/SettingsActivity"
android:label="@string/app_settings_activity_title">
<intent-filter>
<action android:name="android.intent.action.APPLICATION_PREFERENCES"/>
</intent-filter>
</activity>
...
</application>
Menerapkan aktivitas setelan
Saat pengguna meluncurkan aplikasi Anda, Android Automotive OS mendeteksi
aktivitas setelan yang Anda deklarasikan dan menampilkan affordance, seperti ikon.
Pengguna dapat mengetuk atau memilih affordance ini menggunakan layar mobil untuk
membuka aktivitas. Android Automotive OS mengirimkan intent ACTION_APPLICATION_PREFERENCES
yang memberi tahu aplikasi Anda untuk memulai aktivitas setelan.
Bagian lainnya menunjukkan cara menyesuaikan kode dari aplikasi contoh Universal Android Music Player (UAMP) untuk menerapkan aktivitas setelan aplikasi Anda.
Untuk memulai, download kode contoh:
# Clone the UAMP repositorygit clone https://github.com/android/uamp.git
# Fetch the appropriate pull request to your local repositorygit fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME
# Switch to the new branchgit checkout NEW_LOCAL_BRANCH_NAME
Untuk menerapkan aktivitas, ikuti langkah-langkah berikut:
- Salin folder
automotive/automotive-lib
ke modul otomotif Anda. - Tentukan hierarki preferensi seperti di
automotive/src/main/res/xml/preferences.xml
. Terapkan
PreferenceFragmentCompat
yang ditampilkan oleh aktivitas setelan Anda. Lihat fileSettingsFragment.kt
danSettingsActivity.kt
di UAMP dan panduan Setelan Android untuk mengetahui informasi selengkapnya.
Saat Anda menerapkan aktivitas setelan, pertimbangkan praktik terbaik berikut untuk menggunakan beberapa komponen di library Preference:
- Memiliki tidak lebih dari dua level kedalaman di bawah tampilan utama dalam aktivitas setelan.
- Jangan gunakan
DropDownPreference
. GunakanListPreference
sebagai gantinya. - Komponen organisasi:
PreferenceScreen
- Ini harus merupakan tingkat atas hierarki preferensi Anda.
PreferenceCategory
- Digunakan untuk mengelompokkan objek
Preference
bersama-sama. - Menyertakan
title
.
- Digunakan untuk mengelompokkan objek
- Sertakan
key
dantitle
di semua komponen berikut. Anda juga dapat menyertakansummary
,icon
, atau keduanya:Preference
- Sesuaikan logika di callback
onPreferenceTreeClick()
dari penerapanPreferenceFragmentCompat
Anda.
- Sesuaikan logika di callback
CheckBoxPreference
- Dapat memiliki
summaryOn
atausummaryOff
, bukansummary
untuk teks bersyarat.
- Dapat memiliki
SwitchPreference
- Dapat memiliki
summaryOn
atausummaryOff
, bukansummary
untuk teks bersyarat. - Dapat memiliki
switchTextOn
atauswitchTextOff
.
- Dapat memiliki
SeekBarPreference
- Menyertakan
min
,max
, dandefaultValue
.
- Menyertakan
EditTextPreference
- Menyertakan
dialogTitle
,positiveButtonText
, dannegativeButtonText
. - Dapat memiliki
dialogMessage
dan/ataudialogLayoutResource
.
- Menyertakan
com.example.android.uamp.automotive.lib.ListPreference
- Penggunaan terutama dari
ListPreference
. - Digunakan untuk menampilkan daftar pilihan tunggal objek
Preference
. - Harus memiliki array
entries
danentryValues
yang sesuai.
- Penggunaan terutama dari
com.example.android.uamp.automotive.lib.MultiSelectListPreference
- Penggunaan terutama dari
MultiSelectListPreference
- Digunakan untuk menampilkan daftar pilihan ganda dari objek
Preference
. - Harus memiliki array
entries
danentryValues
yang sesuai.
- Penggunaan terutama dari
Menambahkan aktivitas login
Jika aplikasi Anda mengharuskan pengguna untuk login, Anda dapat menambahkan aktivitas login yang dioptimalkan untuk kendaraan yang menangani proses login dan logout dari aplikasi Anda. Anda juga dapat menambahkan alur kerja login dan logout ke aktivitas setelan, tetapi Anda harus menggunakan aktivitas login khusus jika aplikasi tidak dapat digunakan hingga pengguna login. Ingat bahwa aktivitas ini hanya dipicu oleh aplikasi yang berjalan di Android Automotive OS. Aplikasi ponsel yang terhubung ke Android Auto tidak menggunakannya.
Mengharuskan login saat aplikasi dimulai
Untuk mengharuskan pengguna login sebelum mereka dapat menggunakan aplikasi Anda, layanan browser media Anda harus melakukan hal-hal berikut:
- Dalam metode
onLoadChildren()
layanan Anda, kirim hasilnull
menggunakan metodesendResult()
. - Tetapkan
PlaybackStateCompat
sesi media keSTATE_ERROR
menggunakan metodesetState()
. Kode ini memberi tahu Android Automotive OS bahwa tidak ada operasi lain yang dapat dijalankan sampai error diselesaikan. - Tetapkan kode error
PlaybackStateCompat
sesi media keERROR_CODE_AUTHENTICATION_EXPIRED
. Kode ini memberi tahu Android Automotive OS bahwa pengguna perlu memberikan autentikasi. - Tetapkan pesan error
PlaybackStateCompat
setErrorMessage()
sesi media menggunakan metode . Karena terlihat oleh pengguna, lokalkan pesan error ini sesuai lokalitas pengguna saat ini. Tetapkan tambahan
PlaybackStateCompat
sesi media menggunakan metodesetExtras()
. Sertakan dua kunci berikut:PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: string yang ditampilkan di tombol yang memulai alur kerja login. Karena terlihat oleh pengguna, lokalkan string ini untuk lokalitas pengguna saat ini.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
:PendingIntent
yang mengarahkan pengguna ke aktivitas login Anda saat pengguna mengetuk tombol yang dirujuk olehPLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
.
Cuplikan kode berikut menunjukkan cara aplikasi mengharuskan pengguna untuk login sebelum menggunakan aplikasi Anda:
Kotlin
import androidx.media.utils.MediaConstants val signInIntent = Intent(this, SignInActivity::class.java) val signInActivityPendingIntent = PendingIntent.getActivity(this, 0, signInIntent, 0) val extras = Bundle().apply { putString( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL, "Sign in" ) putParcelable( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT, signInActivityPendingIntent ) } val playbackState = PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f) .setErrorMessage( PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED, "Authentication required" ) .setExtras(extras) .build() mediaSession.setPlaybackState(playbackState)
Java
import androidx.media.utils.MediaConstants; Intent signInIntent = new Intent(this, SignInActivity.class); PendingIntent signInActivityPendingIntent = PendingIntent.getActivity(this, 0, signInIntent, 0); Bundle extras = new Bundle(); extras.putString( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL, "Sign in"); extras.putParcelable( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT, signInActivityPendingIntent); PlaybackStateCompat playbackState = new PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f) .setErrorMessage( PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED, "Authentication required" ) .setExtras(extras) .build(); mediaSession.setPlaybackState(playbackState);
Setelah pengguna berhasil diautentikasi, tetapkan PlaybackStateCompat
kembali ke kondisi selain STATE_ERROR
,
lalu arahkan pengguna kembali ke Android Automotive OS dengan memanggil metode finish()
aktivitas.
Menerapkan aktivitas login
Google menawarkan berbagai alat identitas yang dapat digunakan untuk membantu pengguna login ke aplikasi Anda di mobil mereka. Beberapa fitur, seperti Firebase Authentication, menyediakan toolkit full stack yang dapat membantu Anda membuat pengalaman autentikasi yang disesuaikan. Alat lainnya memanfaatkan kredensial yang sudah dimiliki pengguna atau teknologi lain untuk membantu Anda memberikan pengalaman login yang lancar.
Alat berikut dapat membantu Anda mempermudah proses login bagi pengguna yang sebelumnya sudah login di perangkat lain:
- Pendaftaran dan Login Sekali Ketuk: jika sudah menerapkan Sekali Ketuk untuk perangkat lain, seperti aplikasi ponsel, Anda dapat menerapkannya untuk Aplikasi Android Automotive OS guna mendukung pengguna Sekali Ketuk yang sudah ada.
- Login dengan Google: jika sudah menerapkan Login dengan Google untuk perangkat lain, seperti aplikasi ponsel, terapkan Login dengan Google untuk perangkat Aplikasi Android Automotive OS Anda guna mendukung pengguna yang sudah Login dengan Google.
- Isi Otomatis dengan Google: jika pengguna menggunakan Isi Otomatis dengan Google di perangkat Android lain, kredensial mereka akan disimpan ke Pengelola Sandi Google. Saat pengguna tersebut login ke aplikasi Android Automotive OS, Isi Otomatis dengan Google akan menyarankan kredensial tersimpan yang relevan. Penggunaan Isi Otomatis dengan Google tidak memerlukan upaya pengembangan aplikasi. Namun, developer aplikasi dapat mengoptimalkan aplikasi mereka untuk mendapatkan hasil yang berkualitas lebih baik. Isi Otomatis dengan Google didukung oleh semua perangkat yang menjalankan Android 8.0 (level API 26) atau yang lebih tinggi, termasuk Android Automotive OS.
Menggunakan AccountManager
Aplikasi Android Automotive OS yang memiliki autentikasi harus menggunakan AccountManager karena alasan berikut:
- UX yang lebih baik dan kemudahan pengelolaan akun: pengguna dapat mengelola semua akun mereka dengan mudah dari menu akun di setelan sistem, termasuk login dan logout.
- Pengalaman "Tamu": mobil adalah perangkat bersama, yang berarti OEM dapat mengaktifkan
pengalaman "tamu" di kendaraan, yang tidak dapat ditambahkan akun. Pembatasan
ini dicapai menggunakan
DISALLOW_MODIFY_ACCOUNTS
untukAccountManager
.
Izin
Jika Anda perlu meminta izin dari pengguna, gunakan alur yang sama dengan aktivitas autentikasi atau aktivitas setelan di diagram alur kerja aktivitas yang ditampilkan di bagian sebelumnya.
Membaca petunjuk penyelenggara media
Bergantung pada aplikasi sistem (termasuk versinya) yang terhubung ke layanan browser media, aplikasi Anda mungkin menerima tambahan berikut:
Penanganan Error
Error di aplikasi media pada Android Automotive OS dikomunikasikan melalui PlaybackStateCompat
sesi
media. Untuk semua error, tetapkan kode error
dan pesan error yang sesuai di PlaybackStateCompat
. Hal ini menyebabkan Toast
muncul
di UI.
Saat terjadi error namun pemutaran dapat dilanjutkan, tentukan error non-fatal. Misalnya, pengguna mungkin dapat memutar musik pada aplikasi sebelum login, tetapi mereka harus login agar dapat melewati lagu. Saat Anda menggunakan error non-fatal, sistem dapat menyarankan agar pengguna login tanpa mengganggu pemutaran untuk item media saat ini.
Saat Anda mengeluarkan error non-fatal, pertahankan sisa PlaybackStateCompat
sebagaimana adanya, selain kode error dan pesan error. Dengan pendekatan
ini, pemutaran item media saat ini dapat dilanjutkan saat pengguna
memutuskan apakah akan login atau tidak.
Jika pemutaran tidak dapat dilakukan, misalnya saat tidak ada koneksi internet dan
tidak ada konten offline, tetapkan status PlaybackStateCompat
ke STATE_ERROR
.
Pada update berikutnya pada PlaybackStateCompat
, hapus kode error
dan pesan error agar tidak menampilkan beberapa peringatan untuk error yang sama.
Jika pada tahap mana pun Anda tidak dapat memuat hierarki penjelajahan—misalnya, jika Anda
memerlukan autentikasi dan pengguna tidak login—kirim hierarki
penjelajahan kosong. Untuk menandakan hal ini, tampilkan hasil null dari onLoadChildren()
untuk
node media root. Jika ini terjadi, sistem akan menampilkan error layar penuh
dengan pesan error yang disetel di PlaybackStateCompat
.
Error yang dapat ditindaklanjuti
Jika error dapat ditindaklanjuti, tetapkan dua tambahan berikut di
PlaybackStateCompat
:
PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: label untuk tombol yang diklik guna mengatasi error. Karena string ini terlihat oleh pengguna, lokalkan string tersebut untuk lokalitas pengguna saat ini.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
:PendingIntent
yang dijalankan oleh tombol untuk mengatasi error, seperti dengan meluncurkan aktivitas login.
Error yang dapat ditindaklanjuti muncul sebagai Dialog
dan dapat diselesaikan oleh pengguna hanya ketika
mobil berhenti.
Menguji kasus error
Pastikan bahwa aplikasi Anda menangani error dalam semua skenario dengan baik, termasuk:
- Tingkat yang berbeda dari produk Anda: misalnya, gratis versus premium atau login versus logout.
- Status mengemudi yang berbeda: misalnya, parkir versus mengemudi.
- Status konektivitas yang berbeda: misalnya, online versus offline.
Pertimbangan lainnya
Ingatlah selalu hal-hal berikut ini saat mengembangkan aplikasi Android Automotive OS:
Konten offline
Jika berlaku, terapkan dukungan pemutaran offline. Mobil dengan Android Automotive OS diharapkan memiliki konektivitas datanya sendiri, yang berarti paket data disertakan dalam biaya kendaraan atau dibayar oleh pengguna. Namun, mobil juga diharapkan memiliki konektivitas yang lebih bervariasi daripada perangkat seluler.
Berikut beberapa hal yang perlu diperhatikan saat Anda mempertimbangkan strategi dukungan offline:
- Waktu terbaik untuk mendownload konten adalah saat aplikasi Anda sedang digunakan.
- Jangan berasumsi bahwa Wi-Fi tersedia. Mobil mungkin tidak pernah masuk ke dalam jangkauan Wi-Fi atau OEM mungkin telah menonaktifkan Wi-Fi dan mengutamakan jaringan seluler.
- Meskipun Anda boleh meng-cache konten dengan cepat yang diharapkan pengguna untuk digunakan, sebaiknya Anda mengizinkan pengguna mengubah perilaku ini melalui aktivitas setelan Anda.
- Kapasitas disk di mobil bervariasi, jadi beri pengguna cara untuk menghapus konten offline, seperti melalui opsi di aktivitas setelan Anda.
Dukungan WebView
WebView didukung di Android Automotive OS, tetapi hanya diizinkan untuk aktivitas setelan dan login Anda. Aktivitas yang menggunakan WebView harus memiliki kemampuan "tutup" atau "kembali" di luar WebView.
Berikut adalah beberapa contoh kasus penggunaan yang dapat diterima untuk WebView:
- Menampilkan kebijakan privasi, persyaratan layanan, atau link terkait hukum lainnya dalam aktivitas setelan Anda.
- Alur berbasis web dalam aktivitas login.
Saat menggunakan WebView, Anda dapat mengaktifkan JavaScript.
Mengamankan WebView Anda
Lakukan semua tindakan pencegahan yang dapat dilakukan untuk membantu memastikan bahwa WebView Anda bukan
titik entri ke internet yang lebih besar. Lihat cuplikan kode berikut untuk
contoh tentang cara mengunci WebView ke URL yang digunakan dalam
panggilan loadUrl()
dan mencegah pengalihan. Sebaiknya Anda menerapkan pengamanan
seperti ini jika memungkinkan, seperti saat menampilkan
link terkait hukum.
Kotlin
override fun shouldOverrideUrlLoading(webView: WebView, webResourceRequest: WebResourceRequest): Boolean { val originalUri: Uri = Uri.parse(webView.originalUrl) // Check for allowed URLs if (originalUri.equals(Uri.parse(BLANK_URL)) || originalUri.equals(webResourceRequest.url)) { return false } if (webResourceRequest.isRedirect) { logger.w("Redirect detected, not following") return true } setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.url) logger.w( String.format( "Navigation prevented to %s original is %s", webResourceRequest.url, originalUri)) return true }
Java
@Override public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) { Uri originalUri = Uri.parse(webView.getOriginalUrl()); // Check for allowed URLs if (originalUri.equals(Uri.parse(BLANK_URL)) || originalUri.equals(webResourceRequest.getUrl())) { return false; } if (webResourceRequest.isRedirect()) { logger.w("Redirect detected, not following"); return true; } setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.getUrl()); logger.w( String.format( "Navigation prevented to %s original is %s", webResourceRequest.getUrl(), originalUri)); return true; }
Nama paket
Karena mendistribusikan Android Package Kit (APK) terpisah untuk Android Automotive OS, Anda dapat menggunakan kembali nama paket dari aplikasi seluler atau membuat nama paket baru. Jika Anda menggunakan nama paket yang berbeda, aplikasi Anda memiliki dua listingan Play Store terpisah. Jika Anda menggunakan kembali nama paket saat ini, aplikasi Anda memiliki satu listingan di kedua platform.
Hal ini utamanya adalah keputusan bisnis. Misalnya, jika salah satu tim Anda sedang mengerjakan aplikasi seluler dan tim yang lain mengerjakan aplikasi Android Automotive OS, masuk akal untuk memiliki nama paket yang terpisah dan membiarkan setiap tim mengelola listingan Play Store-nya sendiri. Tidak ada perbedaan besar dalam upaya teknis yang diperlukan untuk menggunakan salah satu pendekatan tersebut.
Tabel berikut merangkum beberapa perbedaan utama lainnya antara menyimpan nama paket saat ini dan menggunakan nama paket baru:
Fitur | Nama paket yang sama | Nama paket baru |
---|---|---|
Listingan Play Store | Satu | Beberapa |
Penginstalan yang dicerminkan | Ya: “instal ulang aplikasi cepat” selama wizard penyiapan | Tidak |
Proses Peninjauan Play Store | Memblokir ulasan: jika ulasan gagal untuk satu APK, APK lain yang dikirimkan dalam rilis yang sama akan diblokir | Ulasan individual |
Statistik, metrik, dan data vital | Kombinasi: Anda dapat memfilter data khusus otomotif. | Terpisah |
Pengindeksan dan penentuan peringkat penelusuran | Membangun dari reputasi saat ini | Tidak ada peralihan |
Mengintegrasikan dengan aplikasi lain | Kemungkinan besar tidak diperlukan perubahan, dengan asumsi kode media dibagi di antara kedua APK | Mungkin harus mengupdate aplikasi yang sesuai, seperti untuk pemutaran URI dengan Asisten Google. |
Pertanyaan umum (FAQ)
Lihat bagian berikut untuk jawaban atas beberapa pertanyaan umum tentang Android Automotive OS.
Hardware
Dapatkah aplikasi saya mendapatkan akses ke mikrofon
Untuk aplikasi yang menargetkan Android 10 (level API 29) atau yang lebih baru, lihat dokumentasi berbagi input audio. Hal ini tidak dapat dilakukan sebelum level API 29.
API mobil mana yang dapat kami akses dan bagaimana caranya?
Anda dibatasi untuk API yang diekspos oleh OEM. Proses sedang dikembangkan untuk menstandarkan cara Anda mengakses API ini.
Aplikasi dapat mengakses API mobil menggunakan SetProperty()
dan GetProperty()
pada CarPropertyManager
.
Lihat kode sumber
atau dokumentasi referensi untuk melihat
daftar semua properti yang tersedia. Jika properti dianotasi
dengan @SystemApi
, properti akan dibatasi untuk aplikasi sistem pramuat.
Tipe codec audio apa yang didukung?
Lihat detail codec audio di Android CDD.
Apakah DRM Widevine didukung?
Ya. DRM Widevine didukung.
Pengembangan dan pengujian
Apakah ada batasan atau rekomendasi untuk menggunakan SDK dan library pihak ketiga?
Kami tidak memiliki pedoman khusus tentang penggunaan SDK dan library pihak ketiga. Jika memilih untuk menggunakan SDK dan library pihak ketiga, Anda tetap bertanggung jawab untuk mematuhi semua persyaratan kualitas aplikasi mobil.
Dapatkah saya menggunakan layanan latar depan?
Satu-satunya kasus penggunaan yang diizinkan untuk layanan latar depan adalah mendownload konten untuk penggunaan offline. Jika Anda memiliki kasus penggunaan lain untuk layanan latar depan yang ingin dilihat dukungannya, hubungi kami menggunakan grup diskusi Android Automotive OS.
Memublikasikan aplikasi Android Automotive OS
Bagaimana cara memublikasikan aplikasi Android Automotive OS menggunakan Konsol Google Play?
Untuk mengetahui detail tentang cara memublikasikan aplikasi Android Automotive OS menggunakan Konsol Google Play, lihat Mendistribusikan ke mobil.
Referensi lainnya
Untuk mempelajari Android Automotive OS lebih lanjut, lihat referensi tambahan berikut.
Contoh
Panduan
- Dirancang untuk Berkendara
- Menggunakan aplikasi pengujian pengontrol media
- Notifikasi di Android Automotive OS
- Kualitas aplikasi Android untuk mobil
Blog
Video
- Cara Membuat Aplikasi Media untuk Mobil (Android Dev Summit '19)
- Cara Membuat Aplikasi Android untuk Mobil (Google I/O'19)
Melaporkan masalah Media Android Automotive OS
Jika mengalami masalah dengan pengembangan aplikasi media 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 bisa berlangganan dan memberi suara pada masalah dengan mengklik bintang untuk masalah di tracker. Untuk mengetahui informasi selengkapnya, lihat Berlangganan pada topik Masalah.