Komponen sistem dan alur penggunaan

Komponen yang berinteraksi dengan Media dijelaskan dalam tabel:

Komponen Deskripsi
Layar Utama Mewakili platform lain di UI mobil yang menampilkan dan mengontrol media yang sedang diputar. Di AOSP, ini adalah layar utama yang ditampilkan saat sistem dimulai. Dari layar ini, pengguna dapat melihat detail item media yang sedang diputar dan menjalankan serangkaian tindakan standar dan kustom yang terbatas (misalnya, Putar dan Jeda).
UI Sistem Menyediakan fungsi yang mencakup opsi navigasi UI global seperti untuk membuka Media.
Asisten Android menyediakan mekanisme bagi berbagai aplikasi asisten suara untuk berinteraksi dengan sistem. Aplikasi ini dapat berinteraksi dengan Sumber Media di latar belakang (misalnya, memutar lagu sebagai hasil perintah suara), atau membuka Media di latar depan (misalnya, saat aplikasi asisten suara diperintahkan untuk menampilkan UI Sumber Media tertentu).
Peluncur Aplikasi Semua aplikasi Android dimulai di Peluncur Aplikasi, termasuk Sumber Media. Media dapat menampilkan pemilih Sumber Media sendiri, yang melengkapi atau menggantikan Peluncur Aplikasi sebagai tempat awal untuk media.
Google Play Store Saat GAS digunakan, di sinilah pengguna menemukan dan menginstal aplikasi baru di perangkat Android. Untuk media, setelah aplikasi diinstal, pengguna akan diarahkan ke Media untuk menyelesaikan proses login atau mulai berinteraksi dengan aplikasi.
Pengelola Sesi Media Layanan sistem Android yang melacak dan mengontrol sesi media dari semua sumber media. API ini menyediakan mekanisme untuk mendeteksi saat Sumber Media menjadi sumber media latar depan. Media, dan semua aplikasi lain yang menampilkan sumber media yang sedang diputar (misalnya, Layar utama), menggunakan Pengelola Sesi Media untuk mendeteksi peristiwa ini dan memperbarui UI dengan tepat. Sumber Media berinteraksi dengan Pengelola Sesi Media melalui Media Session API.
Radio Aplikasi khusus untuk berinteraksi dengan hardware radio. Radio menelusuri stasiun radio, memilih stasiun yang baru saja diidentifikasi dengan cepat, dan beralih antar-band radio. Komponen UI yang digunakan bersama oleh Radio dan Media memungkinkan pengguna beralih di antara dua pengalaman.
Driver Distraction Engine Layanan sistem Android yang digunakan untuk menerapkan pembatasan UX berdasarkan kondisi mengemudi mobil. Untuk UX setelan dan login sumber media (tempat layar dikontrol langsung oleh sumber media), layanan ini memastikan tidak ada konten tidak aman yang ditampilkan saat mobil dalam kondisi mengemudi. OEM dapat menyesuaikan definisi status ini dan cara sistem bereaksi dalam situasi ini (misalnya, dengan menampilkan overlay layar pemblokiran).

Alur penggunaan

Peluncuran aplikasi media

Media harus diluncurkan menggunakan CAR_INTENT_ACTION_MEDIA_TEMPLATE implisit berikut. Intent ini dapat memiliki informasi berikut sebagai tambahan:

  • android.car.intent.extra.MEDIA_COMPONENT (opsional). Ekstra string untuk merepresentasikan nama komponen yang diratakan dari MediaBrowserService di aplikasi media yang akan dihubungkan oleh Media. Jika tidak diberikan, Media akan menampilkan aplikasi media yang saat ini dipilih. Intent ini digunakan dari titik entri berikut:

    • UI Sistem. Digunakan untuk kembali ke pengalaman Media atau untuk mulai menggunakannya untuk pertama kalinya. Dalam hal ini, Intent di atas akan digunakan tanpa ekstra apa pun sehingga menyebabkan Media menampilkan aplikasi media yang saat ini dipilih.

    • Layar Utama, Asisten, dan Pusat Notifikasi. Pengguna dapat membuka Media untuk menampilkan aplikasi media yang saat ini dipilih. Dalam semua kasus, Intent implisit tanpa ekstra dipicu.

    • Peluncur Aplikasi. Saat pengguna memilih aplikasi media dari Peluncur Aplikasi, intent di atas menyertakan ekstra CAR_EXTRA_MEDIA_COMPONENT, yang berisi aplikasi media yang dipilih. Media menetapkan ini sebagai aplikasi yang baru dipilih dan terhubung ke aplikasi tersebut. Untuk mengetahui detailnya, lihat bagian di bawah, Integrasi Peluncur Aplikasi ke Media.

Integrasi peluncur aplikasi ke Media

Aplikasi media tidak diizinkan untuk menyediakan aktivitas apa pun yang diberi anotasi dengan kategori android.intent.category.LAUNCHER. Akibatnya, Peluncur Aplikasi (atau yang setara) harus menerapkan logika khusus untuk mengatasi integrasi sumber media:

  • Peluncur Aplikasi harus memindai sistem untuk menemukan paket yang menerapkan MediaBrowserService.SERVICE_INTERFACE. Untuk paket ini, Peluncur Aplikasi mengambil ikon layanan yang serupa dengan yang digunakan untuk mengambil aktivitas lainnya.

  • Peluncur Aplikasi kemudian menggabungkan paket ini dengan paket yang menerapkan aktivitas android.intent.category.LAUNCHER. Jika aplikasi menyediakan implementasi MediaBrowserService dan aktivitas peluncur, layanan akan diprioritaskan.

    Saat penulisan ini, tidak ada aplikasi sumber media yang dapat menyediakan aktivitas peluncur.

  • Contoh logika ini dapat ditemukan dalam kode AOSP di AppLauncherUtils#getAllLauncherApps().

Opsi konfigurasi dan alur login

Aplikasi media dapat menyertakan aktivitas Setelan yang dioptimalkan untuk kendaraan. Aktivitas tersebut dapat digunakan untuk menerapkan alur pengguna yang tidak ditangani oleh Android Media API, misalnya:

  • Login
  • Logout
  • Beralih akun
  • Akun yang saat ini digunakan pengguna untuk login (jika ada)
  • Konfigurasi layanan

Aktivitas Setelan ini dideklarasikan oleh aplikasi media dengan filter intent berikut:

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

Media harus menerapkan logika berikut:

  • Periksa apakah aplikasi media yang saat ini dipilih menyertakan aktivitas dengan Filter Intent yang diberikan.

  • Jika ya, izinkan pengguna membuka aktivitas.

  • Jika Pembatasan UX Mobil diberlakukan (misalnya, mobil sedang bergerak), kemampuan ini harus dinonaktifkan karena aktivitas Setelan bukan UI yang Dioptimalkan untuk Pengemudi.

Penanganan error dan login yang diperlukan

Media berinteraksi dengan aplikasi media melalui Android Media Session API. Sebagai bagian dari API ini, Media menerima objek PlaybackState, yang mengomunikasikan status aplikasi media saat ini.

Proses login dimulai saat aplikasi media mengubah PlaybackState menjadi STATE_ERROR, termasuk kode error tertentu (lihat detail di bawah). Jika hal ini terjadi, Media akan menampilkan deskripsi error dan kemampuan untuk membuka aktivitas login yang diterapkan oleh aplikasi media.

Alur yang sama ini dapat digunakan oleh aplikasi untuk menandakan situasi error lainnya (misalnya, error konektivitas server).

Sebagai bagian dari penanganan error PlaybackState normal, Media harus memeriksa input berikut.

  • Kode error PlaybackState sama dengan PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED. Hal ini menandakan bahwa aplikasi media memerlukan login untuk melanjutkan pengoperasian. Kode error lainnya dapat diterima, yang akan menunjukkan jenis situasi error lainnya.

  • pesan error PlaybackState (ditetapkan oleh aplikasi media menggunakan metode PlaybackStateCompat.Builder#setErrorMessage ) berisi penjelasan yang dapat dibaca manusia (misalnya, "Anda belum login"). Pesan ini harus ditampilkan kepada pengguna dan harus dioptimalkan untuk mengurangi gangguan (DO).

  • Jika perlu, PlaybackState dapat menyertakan tambahan berikut (ditetapkan oleh aplikasi media dengan metode PlaybackStateCompat.Builder#setExtras) dengan kunci berikut.

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL. Setel ke string yang berisi pesan yang dapat dibaca manusia untuk ditampilkan di tombol yang disentuh pengguna untuk memulai alur login.

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT. Ditetapkan dengan PendingIntent yang akan dipicu saat pengguna mengklik tombol yang disebutkan di atas. PendingIntent ini mengarah ke aktivitas login kustom yang diterapkan oleh aplikasi media yang sama.

  • Status PlaybackState sama dengan STATE_ERROR. Hal ini menandakan bahwa tidak ada operasi lain yang dapat dilakukan hingga login selesai.