Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Menambahkan dukungan Android Automotive OS ke project Android Auto

Jika sudah memiliki aplikasi media yang berfungsi dengan Android Auto, Anda dapat menambahkan dukungan untuk Android Automotive OS dengan menyelesaikan beberapa langkah saja. Android Automotive OS memungkinkan pengguna untuk menginstal aplikasi mandiri ke sistem infotainmen kendaraannya. Untuk menjangkau pengguna yang memiliki mobil dengan Android Automotive OS, Anda perlu membuat aplikasi mandiri yang dioptimalkan untuk pengemudi dan terpisah dari aplikasi ponsel.

Android Automotive OS terhubung ke aplikasi Anda menggunakan Media Browse Service yang sama dengan yang digunakan aplikasi ponsel untuk terhubung ke Android Auto.

Ringkasan pengembangan

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

  1. Buat modul otomotif
  2. Periksa file manifes
  3. Perbarui dependensi Gradle Anda
  4. (Opsional) Tambahkan aktivitas setelan atau login

Pertimbangan desain

Android Automotive OS menangani tata letak konten media yang diterimanya dari Media Browse Service aplikasi Anda. Seperti halnya Android Auto, ini berarti aplikasi Anda tidak menggambar UI dan tidak memulai aktivitas apa pun saat pengguna memicu pemutaran media.

Namun, 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

Untuk mengakses fitur yang diperlukan membuat dan menjalankan pengujian Android Automotive OS, Anda harus menggunakan Android Studio 3.5 Canary 11 atau yang lebih tinggi.

Lalu, ikuti langkah-langkah berikut untuk mengaktifkan fitur otomotif:

  1. Jika belum ada, buat file studioFlags.xml di salah satu lokasi berikut, tergantung sistem operasi Anda:

    • Windows: %USERPROFILE%\.AndroidStudioPreview3.5\config\options
    • macOS: ~/Library/Preferences/AndroidStudioPreview3.5/options
    • Linux: ~/.AndroidStudioPreview3.5/config/options
  2. Tambahkan entri berikut ke file studioFlags.xml:

    <application>
        <component name="StudioFlags">
          <option name="data">
            <map>
              <entry key="npw.templates.automotive" value="true" />
            </map>
          </option>
        </component>
        </application>
        

Buat 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. Anda sudah memiliki Media Browse Service untuk Android Auto, jadi pilih Add No Activity, lalu klik Finish.

Periksa file manifes

Setelah membuat modul di Android Studio, buka AndroidManifest.xml di 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 saat ini tidak ada aktivitas yang dideklarasikan dalam manifes. Jika aplikasi Anda memerlukannya, Anda dapat menambahkan aktivitas Setelan atau Login, meskipun aktivitas tersebut dipicu oleh sistem menggunakan intent eksplisit. Hanya kedua aktivitas itulah yang harus dideklarasikan dalam manifes untuk aplikasi Android Automotive OS Anda.

Perbarui dependensi Gradle Anda

Sebaiknya Anda menempatkan Media Browse Service dalam modul terpisah yang Anda gunakan bersama dengan aplikasi ponsel dan modul otomotif. Jika menggunakan pendekatan ini, Anda perlu memperbarui modul otomotif baru Anda agar menyertakan modul yang digunakan bersama ini dalam Media Browse Service, seperti ditunjukkan dalam cuplikan berikut:

my-auto-module/build.gradle

    buildscript {
      ...
      dependencies {
        ...
        implementation project(':shared_module_name')
      }
    }
    

Menerapkan aktivitas setelan dan login untuk Android Automotive OS

Selain Media Browse Service, Anda juga dapat menambahkan aktivitas Setelan dan Login yang dioptimalkan untuk kendaraan ke aplikasi Android Automotive OS Anda. Aktivitas ini memungkinkan Anda menyediakan fungsionalitas aplikasi yang tidak disertakan dalam Android Media API.

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.

Alur kerja aktivitas Setelan

Aktivitas Setelan dapat menyediakan berbagai alur kerja kepada pengguna. Gambar berikut menunjukkan bagaimana pengguna berinteraksi dengan aktivitas Setelan menggunakan Android Automotive OS:

Alur kerja untuk aktivitas Setelan

Gambar 1. Diagram alur kerja untuk aktivitas Setelan

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 akan mendeteksi aktivitas Setelan yang Anda deklarasikan dan menampilkan affordance. Pengguna dapat mengetuk atau memilih affordance ini menggunakan layar mobil untuk mengakses aktivitas. Android Automotive OS mengirimkan intent ACTION_APPLICATION_PREFERENCES yang memberi tahu aplikasi Anda untuk memulai aktivitas setelan.

Menambahkan aktivitas Login

Jika aplikasi Anda mengharuskan pengguna untuk login, Anda dapat menambahkan aktivitas Login yang dioptimalkan untuk kendaraan yang akan menangani alur kerja 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 Anda tidak dapat digunakan sebelum pengguna login.

Alur kerja aktivitas Login

Gambar berikut menunjukkan bagaimana pengguna berinteraksi dengan aktivitas Login menggunakan Android Automotive OS:

Alur kerja untuk aktivitas Login

Gambar 2. Diagram alur kerja untuk aktivitas Login

Mengharuskan login saat aplikasi dimulai

Untuk mengharuskan pengguna login melalui aktivitas Login agar mereka dapat menggunakan aplikasi Anda, Media Browse Service harus melakukan hal-hal berikut:

  1. 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.
  2. Setel kode error PlaybackState sesi media ke ERROR_CODE_AUTHENTICATION_EXPIRED. Kode ini memberi tahu Android Automotive OS bahwa pengguna perlu memberikan autentikasi.
  3. Setel pesan error PlaybackState sesi media menggunakan metode setErrorMessage(). Karena terlihat oleh pengguna, pesan ini harus dilokalkan sesuai bahasa pengguna saat ini.
  4. Setel parameter tambahan PlaybackState sesi media menggunakan metode setExtras(). Sertakan dua kunci berikut:

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL: String yang ditampilkan pada tombol yang memulai alur kerja login. Karena terlihat oleh pengguna, string ini harus dilokalkan sesuai bahasa pengguna saat ini.
    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT: PendingIntent yang mengarahkan pengguna ke aktivitas Login saat mereka mengetuk tombol yang direferensikan oleh android.media.extras.ERROR_RESOLUTION_ACTION_LABEL.

Cuplikan kode berikut menunjukkan bagaimana aplikasi Anda dapat mengharuskan pengguna untuk login sebelum menggunakan aplikasi Anda:

Kotlin

    val signInIntent = Intent(this, SignInActivity::class.java)
    val signInActivityPendingIntent = PendingIntent.getActivity(this, 0,
        signInIntent, 0)
    val extras = Bundle().apply {
        putString(
            "android.media.extras.ERROR_RESOLUTION_ACTION_LABEL",
            "Sign in"
        )
        putParcelable(
            "android.media.extras.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

    Intent signInIntent = new Intent(this, SignInActivity.class);
    PendingIntent signInActivityPendingIntent = PendingIntent.getActivity(this, 0,
        signInIntent, 0);
    Bundle extras = new Bundle();
    extras.putString(
        "android.media.extras.ERROR_RESOLUTION_ACTION_LABEL",
        "Sign in");
    extras.putParcelable(
        "android.media.extras.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 autentikasi pengguna berhasil, 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 fitur 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 fitur 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.
  • IsiOtomatis dengan Google: Jika pengguna menggunakan IsiOtomatis dengan Google di perangkat Android lain, kredensial mereka akan disimpan ke pengelola sandi Google. Kemudian, saat pengguna login ke aplikasi Android Automotive OS Anda, IsiOtomatis dengan Google akan menyarankan kredensial tersimpan yang relevan. Penggunaan IsiOtomatis 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).

Menangani tindakan yang dilindungi dengan login

Beberapa aplikasi memungkinkan pengguna mengakses tindakan tertentu secara anonim, tetapi mengharuskan pengguna untuk login agar mereka dapat melakukan tindakan lain. Misalnya, pengguna mungkin dapat memutar musik pada aplikasi sebelum login, tetapi mereka harus login agar dapat melompati lagu.

Dalam kasus semacam ini, saat pengguna mencoba melakukan tindakan yang dibatasi (melompati lagu), aplikasi Anda dapat meminta pengguna agar memberikan autentikasi dengan menampilkan error non-fatal. Dengan error non-fatal, sistem akan menampilkan pesan kepada pengguna tanpa menyela pemutaran item media yang sedang aktif. Untuk menerapkan penanganan error non-fatal, selesaikan langkah-langkah berikut:

  1. Setel kode errorCode untuk PlaybackState sesi media ke ERROR_CODE_AUTHENTICATION_EXPIRED. Kode ini memberi tahu Android Automotive OS bahwa pengguna perlu memberikan autentikasi.
  2. Pertahankan state untuk PlaybackState sesi media apa adanya — jangan tetapkan ke STATE_ERROR. Ini digunakan untuk memberi tahu sistem bahwa error tersebut tidak fatal.
  3. Setel parameter tambahan PlaybackState sesi media menggunakan metode setExtras(). Sertakan dua kunci berikut:

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL: String yang ditampilkan pada tombol yang memulai alur kerja login. Karena terlihat oleh pengguna, string ini harus dilokalkan sesuai bahasa pengguna saat ini.
    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT: PendingIntent yang mengarahkan pengguna ke aktivitas Login saat mereka mengetuk tombol yang direferensikan oleh android.media.extras.ERROR_RESOLUTION_ACTION_LABEL.
  4. Pertahankan status PlaybackState sesi media lainnya apa adanya. Hal ini memungkinkan dilanjutkannya pemutaran item media saat ini sementara pengguna memutuskan apakah akan login atau tidak.

Menguji aplikasi untuk Android Automotive OS

Anda dapat menggunakan Android Emulator untuk menguji bagaimana aplikasi Anda yang dioptimalkan untuk pengemudi berjalan di layar kendaraan Android Automotive OS. Bagian ini menjelaskan cara menyiapkan Android Virtual Device (AVD) yang dapat Anda gunakan untuk menguji aplikasi.

Mengedit konfigurasi proses

Aplikasi Automotive OS berbeda dengan aplikasi Android lainnya. Android Automotive OS berinteraksi dengan aplikasi Anda menggunakan intent eksplisit dan Media Browse Service.

Untuk menguji aplikasi Anda, verifikasi bahwa Anda telah menyetel modul otomotif Anda untuk tidak memulai aktivitas apa pun dengan mengikuti langkah-langkah ini:

  1. Di Android Studio, pilih Run > Edit Configurations.

    Kotak dialog Run/Debug Configurations.

  2. Pilih modul otomotif Anda dari daftar modul pada aplikasi Anda.

  3. Di bagian Launch Options > Launch, pilih Nothing.

  4. Klik Apply, lalu klik OK.

Menambahkan image sistem

Agar dapat membuat AVD yang cocok dengan hardware produsen tertentu, Anda perlu menambahkan image sistem untuk perangkat tersebut melalui Android Studio SDK Manager. Selanjutnya, saat membuat AVD, Anda dapat mendownload image sistem ini untuk digunakan dengan AVD.

Ikuti langkah-langkah berikut untuk menambahkan image sistem untuk Polestar 2:

  1. Di Android Studio, pilih Tools > SDK Manager.
  2. Klik tab SDK Update Sites.
  3. Klik Add Ikon Add.
  4. Masukkan Name dan URL berikut, lalu klik OK:

    Name: Polestar 2 System Image

    URL: https://developer.polestar.com/sdk/polestar2-sys-img.xml

  5. Klik Apply, lalu klik OK.

Membuat AVD mobil dan menjalankan emulator

Ikuti langkah-langkah berikut untuk membuat Android Virtual Device (AVD) yang merepresentasikan kendaraan Android Automotive OS, lalu gunakan AVD tersebut untuk menjalankan emulator:

  1. Di Android Studio, pilih Tools > AVD Manager.
  2. Klik Create Virtual Device.
  3. Dari dialog Select Hardware, pilih Automotive, lalu pilih sebuah perangkat dan klik Next.
  4. Pilih image sistem yang menargetkan Automotive, seperti Android 9.0 (Automotive), dan klik Next.
  5. Beri nama AVD Anda dan pilih opsi lain yang ingin Anda sesuaikan, lalu klik Finish.
  6. Dari panel jendela fitur, pilih AVD Android Automotive OS sebagai target deployment Anda.
  7. Klik Run Ikon Run.