Menambahkan dukungan Android Automotive OS ke aplikasi media

Android Automotive OS memungkinkan pengguna menginstal aplikasi di mobil. Sebagai upaya 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

Dukungan Android Automotive OS dapat ditambahkan dengan mudah dan dalam beberapa langkah saja:

  1. Mengaktifkan fitur otomotif di Android Studio
  2. Membuat modul otomotif
  3. Memperbarui dependensi Gradle
  4. Menambahkan setelan atau aktivitas login (Opsional)

Pertimbangan desain

Android Automotive OS menangani tata letak konten media yang diterimanya dari layanan browser media aplikasi Anda. Artinya, aplikasi Anda tidak menarik 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. Anda perlu merujuk ke Pedoman desain untuk Android Automotive OS saat merancang 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. Karena itu, Anda perlu membuat 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:

  1. Di Android Studio, pilih File > New > New Module.
  2. Pilih Automotive Module, lalu klik Next.
  3. Berikan Application/Library name. Nama ini akan dilihat pengguna aplikasi Anda di Android Automotive OS.
  4. Berikan Module name.
  5. Sesuaikan Package name agar cocok dengan aplikasi Anda.
  6. Pilih API 28:Android 9.0 (Pie) untuk Minimum SDK, lalu klik Next.

    Semua mobil yang mendukung Android Automotive OS berjalan pada Android 9 (API level 28) atau yang lebih tinggi, jadi memilih nilai ini akan menargetkan 100% mobil yang menggunakan Android Automotive OS.

  7. Pilih Add 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>

Anda akan melihat beberapa informasi aplikasi standar dalam elemen application, tetapi ada juga 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 atau Login, tambahkan di sini. Aktivitas ini dipicu oleh sistem menggunakan intent eksplisit dan merupakan satu-satunya aktivitas yang harus dideklarasikan dalam manifes untuk aplikasi Android Automotive OS Anda.

Setelah menambahkan aktivitas Setelan atau Login, lengkapi file manifes dengan menyetel atribut android:appCategory="audio" di elemen application dan menambahkan elemen users-features 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 tidak wajib memastikan bahwa aplikasi Anda tidak bentrok dengan fitur hardware yang tersedia di perangkat OS Otomotif.

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 kapabilitas 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 proyek Anda. File ini harus mencakup konten berikut:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

Filter intent

Android Automotive OS menggunakan intent eksplisit untuk memicu aktivitas di aplikasi media Anda. File manifes tidak boleh berisi aktivitas apa pun yang memiliki filter intent CATEGORY_LAUNCHER atau ACTION_MAIN.

Aktivitas seperti dalam contoh berikut biasanya menargetkan ponsel, atau jenis perangkat seluler lainnya. Aktivitas ini harus dideklarasikan 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

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:

my-auto-module/build.gradle

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 Android Media API.

Sebaiknya Anda hanya mengimplementasikan 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:

Alur kerja untuk Setelan dan Aktivitas login

Gambar 1. Setelan dan alur kerja aktivitas login

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 sampel Universal Android Music Player (UAMP) untuk menerapkan aktivitas setelan aplikasi Anda.

Untuk memulai, download kode contoh:

# Clone the UAMP repository
git clone https://github.com/android/uamp.git

# Fetch the appropriate pull request to your local repository
git fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME

# Switch to the new branch
git checkout NEW_LOCAL_BRANCH_NAME

Untuk menerapkan aktivitas, ikuti langkah-langkah berikut:

  1. Salin folder automotive/automotive-lib ke modul otomotif Anda.
  2. Tentukan hierarki preferensi seperti di automotive/src/main/res/xml/preferences.xml.
  3. Terapkan PreferenceFragmentCompat (lihat SettingsFragment.kt di UAMP) yang akan ditampilkan oleh aktivitas setelan Anda (lihat SettingsActivity.kt). Lihat panduan Setelan Android untuk mengetahui informasi selengkapnya.

Saat Anda menerapkan aktivitas setelan, lihat praktik terbaik berikut untuk menggunakan beberapa komponen di pustaka Preferensi:

  • Aplikasi Anda tidak boleh memiliki lebih dari 2 level kedalaman di bawah tampilan utama dalam aktivitas setelan.
  • Jangan gunakan DropDownPreference. Gunakan ListPreference sebagai gantinya.
  • Komponen organisasi:
    • PreferenceScreen
      • Ini harus merupakan tingkat atas hierarki preferensi Anda.
    • PreferenceCategory
      • Digunakan untuk mengelompokkan objek Preference bersama-sama.
      • Seharusnya memiliki title.
  • Semua komponen berikut harus memiliki key dan title serta dapat memiliki summary dan/atau icon:
    • Preference
      • Sesuaikan logika di callback onPreferenceTreeClick() dari penerapan PreferenceFragmentCompat Anda.
    • CheckBoxPreference
      • Mungkin memiliki summaryOn atau summaryOff, bukan summary untuk teks bersyarat.
    • SwitchPreference
      • Mungkin memiliki summaryOn atau summaryOff, bukan summary untuk teks bersyarat.
      • Mungkin memiliki switchTextOn atau switchTextOff.
    • SeekBarPreference
      • Harus memiliki min, max, dan defaultValue.
    • EditTextPreference
      • Harus memiliki dialogTitle, positiveButtonText, dan negativeButtonText.
      • Mungkin memiliki dialogMessage dan/atau dialogLayoutResource.
    • com.example.android.uamp.automotive.lib.ListPreference
      • Penggunaan terutama dari ListPreference
      • Digunakan untuk menampilkan daftar pilihan tunggal Preference objek.
      • Harus memiliki array entries dan entryValues yang sesuai.
    • com.example.android.uamp.automotive.lib.MultiSelectListPreference
      • Penggunaan terutama dari MultiSelectListPreference
      • Digunakan untuk menampilkan daftar pilihan ganda dari objek Preference.
      • Harus memiliki array entries dan entryValues yang sesuai.

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:

  1. Dalam metode onLoadChildren() layanan Anda, kirim hasil null menggunakan metode sendResult().
  2. Tetapkan PlaybackState sesi media ke STATE_ERROR menggunakan metode setState(). Kode ini memberi tahu Android Automotive OS bahwa tidak ada operasi lain yang dapat dijalankan sampai error diselesaikan.
  3. Tetapkan kode error PlaybackState sesi media ke ERROR_CODE_AUTHENTICATION_EXPIRED. Kode ini memberi tahu Android Automotive OS bahwa pengguna perlu memberikan autentikasi.
  4. Tetapkan pesan error PlaybackState sesi media menggunakan metode setErrorMessage(). Karena terlihat oleh pengguna, pesan error ini harus dilokalkan sesuai lokal pengguna saat ini.
  5. Tetapkan tambahan PlaybackState sesi media menggunakan metode setExtras(). Sertakan dua kunci berikut:

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 mengautentikasi, aplikasi Anda harus menetapkan PlaybackState kembali ke status selain STATE_ERROR lalu membawa 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 tumpukan penuh yang dapat membantu Anda membuat pengalaman autentikasi yang disesuaikan. Fitur lainnya memanfaatkan kredensial yang sudah dimiliki pengguna atau teknologi lain untuk membantu Anda memberikan pengalaman login yang lancar.

Kami merekomendasikan alat berikut untuk membantu Anda mempermudah proses login bagi pengguna yang sebelumnya sudah login di perangkat lain:

  • Login dengan Google: Jika sudah menerapkan Login dengan Google untuk perangkat lain (seperti aplikasi ponsel), Anda juga harus menerapkan Login dengan Google untuk aplikasi Android Automotive OS agar 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. Lalu, saat mereka 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 harus mengoptimalkan aplikasi mereka untuk memberikan kualitas yang lebih baik. IsiOtomatis dengan Google didukung oleh semua perangkat yang menjalankan Android Oreo 8.0 (API level 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": Karena mobil adalah perangkat bersama, OEM dapat mengaktifkan pengalaman "tamu" di kendaraan, yang tidak dapat ditambahkan akun. Pembatasan ini dicapai menggunakan DISALLOW_MODIFY_ACCOUNT untuk AccountManager.

Izin

Jika Anda perlu meminta izin dari pengguna, gunakan alur yang sama seperti aktivitas autentikasi atau aktivitas setelan di diagram alur kerja aktivitas.

Penanganan Error

Error di aplikasi media pada Android Automotive OS dikomunikasikan melalui PlaybackState sesi media. Untuk semua error, Anda harus menetapkan kode error dan pesan error yang sesuai di PlaybackState. Hal ini menyebabkan Toast muncul di UI.

Saat terjadi kesalahan namun pemutaran dapat dilanjutkan, Anda harus mengeluarkan kesalahan tidak fatal. Misalnya, pengguna mungkin dapat memutar musik pada aplikasi sebelum login, tetapi mereka harus login agar dapat melewati lagu. Dengan error non-fatal, sistem dapat menyarankan agar pengguna login tanpa mengganggu pemutaran untuk item media saat ini. Dalam hal ini, Anda harus mempertahankan PlaybackState apa adanya (selain dari kode kesalahan dan pesan error). Hal ini memungkinkan dilanjutkannya pemutaran item media saat ini sementara pengguna memutuskan apakah akan login atau tidak.

Jika pemutaran tidak dapat dilakukan, misalnya jika tidak ada koneksi internet dan tidak ada konten offline, Anda harus menetapkan status PlaybackState ke STATE_ERROR.

Pada update berikutnya pada PlaybackState, Anda harus menghapus 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—Anda harus mengirim hierarki penjelajahan kosong. Untuk menandakan hal ini, onLoadChildren() untuk node media akar harus mengembalikan hasil null. Jika ini terjadi, sistem akan menampilkan error layar penuh dengan pesan error yang disetel di PlaybackState.

Error yang dapat ditindaklanjuti

Jika error dapat ditindaklanjuti, tetapkan dua tambahan berikut di PlaybackState:

Error yang dapat ditindaklanjuti muncul sebagai Dialog dan dapat diatasi oleh pengguna hanya bila mobil berhenti.

Menguji kasus error

Anda harus memverifikasi bahwa aplikasi Anda menangani dengan baik dalam semua skenario, 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, yaitu paket data yang disertakan dalam biaya kendaraan atau dibayar oleh pengguna. Namun, mobil juga diharapkan memiliki konektivitas yang lebih bervariasi daripada perangkat seluler. Karena itu, sebaiknya pikirkan strategi dukungan offline terbaik untuk konten Anda. Ruang disk di mobil dapat bervariasi, jadi pastikan pengguna dapat menghapus konten offline, misalnya melalui opsi di aktivitas setelan.

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 mungkin akan digunakan oleh pengguna, kami sangat menyarankan untuk mengizinkan pengguna mengubah perilaku ini melalui aktivitas setelan Anda.

Dukungan commerce

Android Automotive OS saat ini tidak mendukung fungsi commerce apa pun. Ini berarti bahwa Anda tidak dapat memiliki aplikasi berbayar maupun pembelian dalam aplikasi di aplikasi Anda. Pengguna dapat membeli IAP di luar aplikasi Android Automotive OS Anda, tetapi tidak diwajibkan untuk melakukan langkah-langkah tambahan yang terkait dengan perdagangan satu kali di mobil untuk menggunakan konten atau fitur berbayar baru.

Dukungan WebView

WebView didukung di Android Automotive OS, tetapi hanya diizinkan untuk setelan dan aktivitas login Anda. Aktivitas yang menggunakan WebView harus memiliki kemampuan tertutup dan/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 login berbasis web dalam aktivitas login Anda.

Saat menggunakan WebView, Anda diizinkan untuk mengaktifkan JavaScript.

Mengamankan WebView Anda

Lakukan semua tindakan pencegahan yang mungkin untuk memastikan bahwa WebView Anda tidak bertindak sebagai titik masuk ke internet yang lebih besar. Lihat cuplikan kode di bawah untuk contoh tentang cara mengunci WebView ke URL yang digunakan dalam panggilan loadUrl() dan mencegah pengalihan. Sangat disarankan untuk menerapkan pengamanan seperti ini saat kasus penggunaan masuk akal (misalnya, 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 APK terpisah untuk Android Automotive OS, Anda memiliki opsi untuk menggunakan kembali nama paket dari aplikasi seluler atau membuat nama paket baru. Perbedaan utamanya adalah bahwa dengan nama paket yang berbeda, aplikasi Anda memiliki dua listingan Play Store yang benar-benar terpisah, sedangkan jika Anda menggunakan kembali nama paket saat ini, Anda akan memiliki satu listingan di kedua platform.

Terutama untuk keputusan bisnis. Misalnya, jika Anda memiliki satu tim yang sedang mengerjakan aplikasi seluler dan tim yang sepenuhnya terpisah yang bekerja di aplikasi Android Automotive OS, masuk akal untuk memiliki nama paket yang terpisah dan biarkan setiap tim mengelola listingan Play Store mereka sendiri. Tidak ada perbedaan besar dalam upaya teknis yang diperlukan untuk menggunakan salah satu pendekatan tersebut.

Tabel berikut merangkum beberapa perbedaan utama lainnya di antara setiap pendekatan:

Fitur Nama paket yang sama Nama paket baru
Listingan toko Satu Beberapa
Penginstalan yang dicerminkan Ya. “Instal ulang aplikasi cepat” selama wizard penyiapan Tidak
Proses Peninjauan Play Store Memblokir ulasan. Saat ini, jika ulasan gagal untuk satu APK, APK lain yang dikirimkan dalam rilis yang sama akan diblokir Ulasan individual
Statistik, metrik, dan vitals Digabungkan. Catatan: Anda dapat memfilter berdasarkan nama perangkat untuk data khusus otomotif (misalnya, 2 mobil pada tahun 2020) Pisahkan
Pengindeksan dan peringkat penelusuran Bangun dari reputasi saat ini Tidak berlaku
Mengintegrasikan dengan aplikasi lain Kemungkinan besar tidak diperlukan perubahan, dengan asumsi kode media dibagi di antara kedua APK Mungkin harus memperbarui aplikasi yang sesuai (misalnya, 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 (API level 29) atau yang lebih baru, lihat dokumentasi berbagi input audio. Hal ini tidak dapat dilakukan sebelum API level 29.

API mobil mana yang dapat kami akses dan bagaimana caranya?

Anda dibatasi untuk API yang diekspos oleh OEM. Kami sedang dalam proses penetapan standar 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 Anda lihat 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?

Proses publikasi aplikasi mirip dengan memublikasikan aplikasi ponsel, tetapi Anda menggunakan jenis rilis yang berbeda. Untuk mengikutsertakan aplikasi Anda menggunakan jenis rilis Android Automotive OS, ikuti langkah-langkah berikut:

  1. Buka Konsol Play.
  2. Pilih aplikasi Anda.
  3. Dari menu sebelah kiri, pilih Rilis > Penyiapan > Setelan lanjutan > Jenis rilis.
  4. PilihTambahkan jenis rilis > Android Automotive OS, lalu ikuti petunjuk di Konsol Play.

Referensi tambahan

Untuk mempelajari Android Automotive OS lebih lanjut, lihat referensi tambahan berikut.

Contoh

Panduan

Blog

Video

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.

Laporkan masalah baru

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.