Implementasi kontrol radio

Implementasi kontrol radio didasarkan pada MediaSession dan MediaBrowse, yang memungkinkan aplikasi Media dan asisten suara untuk mengontrol radio. Untuk informasi selengkapnya, lihat Buat aplikasi media untuk mobil di developer.android.com.

Implementasi hierarki penjelajahan media disediakan dalam dukungan car-broadcastradio library di packages/apps/Car/libs. Pustaka ini juga berisi ekstensi ProgramSelector untuk mengonversi ke dan dari URI. Disarankan agar implementasi radio menggunakan pustaka ini untuk membangun hierarki penjelajahan terkait.

Pengalih sumber media

Untuk memberikan transisi yang mulus antara radio dan aplikasi lain yang ditampilkan di media, {i>library <i}car-media-common berisi kelas yang harus diintegrasikan ke dalam . MediaAppSelectorWidget dapat disertakan dalam XML untuk aplikasi radio (ikon dan drop-down yang digunakan di media referensi dan aplikasi radio):

<com.android.car.media.common.MediaAppSelectorWidget
    android:id="@+id/app_switch_container"
    android:layout_width="@dimen/app_switch_widget_width"
    android:layout_height="wrap_content"
    android:background="@drawable/app_item_background"
    android:gravity="center" />

Widget ini meluncurkan AppSelectionFragment, yang menampilkan daftar sumber media yang dapat dialihkan. Jika menginginkan UI selain yang disediakan, Anda dapat membuat widget khusus untuk meluncurkan AppSelectionFragment saat pengalih akan ditampilkan.

AppSelectionFragment newFragment = AppSelectionFragment.create(widget,
            packageName, fullScreen);
    newFragment.show(mActivity.getSupportFragmentManager(), null);

Contoh implementasi disediakan dalam implementasi aplikasi radio referensi, yang berada di packages/apps/Car/Radio.

Spesifikasi kontrol mendetail

MediaSession (melalui MediaSession.Callback) menyediakan mekanisme kontrol untuk program radio yang sedang diputar:

  • onPlay, onStop. (Mengaktifkan)membisukan pemutaran radio.
  • onPause. Jeda pergeseran waktu (jika didukung).
  • onPlayFromMediaId. Memutar konten apa pun dari folder tingkat atas. Misalnya, "Putar FM" atau "Putar Radio".
  • onPlayFromUri. Memutar frekuensi tertentu. Misalnya, "Putar 88,5 FM".
  • onSkipToNext, onSkipToPrevious. Menyetel ke berikutnya atau sebelumnya terkelola sepenuhnya.
  • onSetRating. Menambahkan atau menghapus ke atau dari Favorit.

MediaBrowser menampilkan file MediaItem pada tiga jenis direktori tingkat atas:

  • (Opsional) Program (stasiun). Mode ini biasanya digunakan oleh radio dual-tuner untuk menunjukkan semua stasiun radio yang dapat disesuaikan yang tersedia di lokasi pengguna.
  • Favorit. Program radio yang ditambahkan ke daftar Favorit, beberapa mungkin tidak tersedia (di luar jangkauan penerimaan).
  • Channel. Semua saluran yang memungkinkan secara fisik di wilayah saat ini (87.9, 88.1, 88.3, 88.5, 88.7, 88.9, 89.1, dan seterusnya). Setiap band memiliki direktori level teratas yang terpisah.
Struktur hierarki MediaBrowserService
Gambar 2. Struktur hierarki MediaBrowserService

Setiap elemen di setiap folder ini (AM/FM/Programs) adalah MediaItem dengan URI yang dapat digunakan dengan MediaSession untuk melakukan tuning. Setiap folder tingkat teratas (AM/FM/Programs) adalah MediaItem dengan mediaId yang dapat digunakan dengan MediaSession untuk memicu pemutaran dan sesuai dengan kebijaksanaan OEM. Sebagai misalnya, "Putar FM", "Putar AM," dan "Putar Radio" adalah semua kueri radio non-spesifik yang menggunakan mediaId yang akan dikirim ke aplikasi radio OEM. Aplikasi radio dapat menentukan apa yang akan diputar dari permintaan generik dan mediaId.

Sesi Media

Mengingat tidak adanya konsep menjeda streaming siaran, tindakan Putar, Jeda, dan Hentikan tidak selalu berlaku untuk radio. Dengan radio, tindakan Berhenti dikaitkan dengan membisukan streaming saat Play dikaitkan dengan pembebasan bisukan.

Beberapa tuner radio (atau aplikasi) menyediakan kemampuan untuk menyimulasikan jeda streaming siaran dengan menyimpan konten dalam cache, lalu memutarnya kembali nanti. Dalam kasus tersebut, gunakan onPause.

Memutar dari tindakan mediaId dan URI dimaksudkan untuk menyetel ke sebuah stasiun diambil dari antarmuka MediaBrowser. MediaId adalah string arbitrer disediakan oleh aplikasi radio untuk menerapkan unik (sehingga ID yang diberikan hanya menunjuk ke satu item) dan stabil (sehingga item tertentu memiliki ID yang sama di seluruh sesi) dengan untuk mengidentifikasi stasiun tertentu. URI akan berupa skema yang didefinisikan dengan baik. Singkatnya, operasi URI dalam bentuk ProgramSelector. Meskipun ini mempertahankan atribut keseragaman, ia tidak perlu stabil, meskipun dapat berubah ketika stasiun bergerak ke frekuensi yang berbeda.

Secara desain, onPlayFromSearch tidak digunakan. Adalah tanggung jawab klien (aplikasi pendamping) untuk memilih hasil penelusuran dari hierarki MediaBrowser. Pindahan tanggung jawab terhadap aplikasi radio akan meningkatkan kompleksitas, membutuhkan kontrak formal tentang bagaimana kueri {i>string<i} harus muncul, dan menghasilkan pengalaman pengguna yang tidak merata pada perangkat keras di seluruh platform Google.

Catatan: Aplikasi radio ini tidak berisi informasi informasi yang akan berguna untuk menelusuri nama stasiun yang tidak diekspos ke klien melalui antarmuka MediaBrowser.

Melewati ke stasiun berikutnya atau sebelumnya bergantung pada konteks saat ini:

  • Ketika aplikasi disesuaikan ke stasiun dari daftar Favorit, aplikasi dapat berpindah ke stasiun berikutnya dari daftar Favorit.
  • Mendengarkan stasiun dari daftar Program bisa menyebabkan penyelarasan ke stasiun berikutnya stasiun yang tersedia, diurutkan berdasarkan nomor salurannya.
  • Mendengarkan saluran arbitrer dapat menyebabkan tuning saluran fisik berikutnya, bahkan saat tidak ada sinyal siaran.

Aplikasi radio menangani tindakan ini.

Penanganan error

TransportControls (Putar, Berhenti, dan Berikutnya) tidak memberikan masukan mengenai apakah tindakan tersebut berhasil atau tidak. Satu-satunya cara untuk menunjukkan error adalah dengan mengatur MediaSession negara bagian ke STATE_ERROR dengan pesan error.

Aplikasi radio harus menangani tindakan tersebut dan menjalankannya atau menetapkan status error. Jika tidak langsung mengeksekusi perintah Play, status pemutaran harus diubah menjadi STATE_CONNECTING (dalam kasus penyesuaian langsung) atau STATE_SKIPPING_TO_PREVIOUS atau NEXT ketika perintah dijalankan.

Klien harus menonton PlaybackState dan memverifikasi bahwa sesi tersebut mengubah program saat ini dengan apa yang diminta atau dimasukkan ke dalam status error. STATE_CONNECTING tidak boleh lebih dari 30 detik. Namun, penyesuaian langsung ke Frekuensi AM/FM akan berfungsi jauh lebih cepat.

Menambahkan dan menghapus favorit

MediaSession memiliki dukungan rating, yang dapat digunakan untuk mengontrol Favorit. onSetRating dipanggil dengan jenis peringkat RATING_HEART menambah atau menghapus stasiun yang sedang disetel ke atau dari daftar Favorit.

Berbeda dengan preset lama, model ini mengasumsikan Favorit yang tidak diurutkan dan tidak terikat daftar, ketika setiap favorit yang disimpan dialokasikan ke slot numerik (biasanya, 1 hingga 6). Akibatnya, sistem berbasis preset tidak akan kompatibel dengan onSetRating operasi.

Keterbatasan MediaSession API adalah hanya stasiun yang saat ini disetel dapat ditambahkan atau dihapus. Misalnya, item harus dipilih terlebih dahulu sebelum dapat dihapus. Ini hanyalah keterbatasan dari klien MediaBrowser, seperti aplikasi pendamping. Aplikasi radio tidak dibatasi secara serupa. Bagian ini bersifat opsional saat aplikasi tidak mendukung Favorit.

MediaBrowser

Untuk mengekspresikan frekuensi atau nama saluran fisik (saat melakukan tuning ke saluran arbitrer cocok untuk teknologi radio tertentu) valid untuk wilayah tertentu, semua saluran (frekuensi) yang valid dicantumkan untuk setiap band. Di wilayah AS, jumlah ini mencapai 101 saluran FM dari dalam rentang 87,8 hingga Rentang 108,0 MHz (menggunakan jarak 0,2 MHz) dan saluran 117 AM di rentang 530 hingga 1700 kHz (menggunakan jarak 10 kHz). Karena radio HD menggunakan ruang saluran yang sama, data tersebut tidak disajikan secara terpisah.

Daftar program radio yang tersedia saat ini tidak berubah sehingga hal ini tidak memungkinkan skema tampilan seperti pengelompokan berdasarkan ensemble siaran audio langsung (DAB).

Entri pada daftar Favorit mungkin tidak dapat disetel. Misalnya jika berada di luar jangkauan. Aplikasi radio mungkin atau mungkin tidak mendeteksi apakah entri tersebut dapat di-tuning terlebih dahulu. Jika demikian, entri tidak dapat ditandai sebagai dapat diputar.

Untuk mengidentifikasi folder tingkat atas, mekanisme yang sama yang digunakan oleh Bluetooth akan diterapkan. Yaitu, paket Tambahan MediaDescription berisi bidang khusus tuner seperti yang dilakukan Bluetooth dengan EXTRA_BT_FOLDER_TYPE. Untuk radio siaran, hal ini mengarah pada penentuan bidang baru berikut di API publik:

  • EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE". paket Premium AI dari nilai berikut:
    • BCRADIO_FOLDER_TYPE_PROGRAMS = 1. Program yang saat ini tersedia.
    • BCRADIO_FOLDER_TYPE_FAVORITES = 2. Favorit.
    • BCRADIO_FOLDER_TYPE_BAND = 3. Semua saluran fisik untuk band tertentu.

    Anda tidak perlu menetapkan kolom metadata khusus khusus radio, karena semua data yang relevan sesuai dengan skema MediaBrowser.MediaItem yang ada:

    • Nama program (RDS PS, nama layanan DAB). MediaDescription.getTitle.
    • Frekuensi FM. URI (lihat ProgramSelector) atau MediaDescription.getTitle (jika entri berada di folder BROADCASTRADIO_FOLDER_TYPE_BAND).
    • ID khusus radio (RDS PI, DAB SId). MediaDescription.getMediaUri diuraikan menjadi ProgramSelector.

    Biasanya, tidak perlu mengambil frekuensi FM untuk entri di program saat ini atau daftar Favorit (karena klien harus beroperasi pada media tertentu). Namun, jika kebutuhan tersebut muncul (misalnya, untuk tujuan tampilan), ada di URI dan dapat diurai menjadi ProgramSelector. Meskipun demikian, sebaiknya jangan menggunakan URI untuk memilih item dalam sesi. Untuk mengetahui detailnya, lihat ProgramSelector.

    Untuk menghindari masalah terkait performa atau binder, layanan MediaBrowser harus mendukung penomoran halaman:

    Catatan: Secara default, penomoran halaman diterapkan secara default di kolom onLoadChildren() varian tanpa penanganan opsi.

    Entri terkait dari semua jenis daftar (saluran mentah, program yang ditemukan dan favorit) mungkin memiliki mediaId yang berbeda (tergantung aplikasi radio; dukungan {i>library<i} akan membuatnya berbeda). URI (dalam bentuk ProgramSelector) berbeda antara saluran dan program mentah yang ditemukan dalam kebanyakan kasus (kecuali untuk FM tanpa RDS), tetapi sebagian besarnya sama antara program yang ditemukan dan favorit (kecuali, misalnya, saat AF diperbarui).

    Memiliki mediaId yang berbeda untuk entri dari berbagai jenis daftar membuat Anda dapat mengambil tindakan yang berbeda terhadap mereka. Anda dapat melintasi daftar Favorit atau daftar Semua Program di onSkipToNext, tergantung pada folder yang baru-baru ini MediaItem yang dipilih (lihat MediaSession).

    Tindakan penyesuaian khusus

    Daftar program memungkinkan pengguna untuk men-tuning stasiun tertentu, tetapi tidak mengizinkan pengguna untuk membuat permintaan umum seperti "Tune to FM", yang dapat mengakibatkan tuning yang didengarkan di pita FM.

    Untuk mendukung tindakan tersebut, beberapa direktori tingkat atas memiliki FLAG_PLAYABLE set tanda (bersama dengan FLAG_BROWSABLE untuk folder).

    Tindakan Dengarkan Cara menerbitkan
    Putar radio Saluran radio mana pun startService(ACTION_PLAY_BROADCASTRADIO)

    ATAU,

    playFromMediaId(MediaBrowser.getRoot())
    Putar FM Saluran FM apa pun Diputar dari mediaId band FM.

    Penentuan program mana yang akan disesuaikan bergantung pada aplikasi. Ini adalah yang biasanya disalurkan ke saluran dari daftar tertentu. Untuk mengetahui detail tentang ACTION_PLAY_BROADCASTRADIO, lihat Intent putar umum.

    Koneksi layanan dan discovery

    PackageManager dapat langsung menemukan MediaBrowserService yang menyajikan radio siaran hierarki. Untuk melakukannya, panggil resolveService dengan intent ACTION_PLAY_BROADCASTRADIO (lihat Intent putar umum) dan flag MATCH_SYSTEM_ONLY. Untuk menemukan semua layanan yang menyajikan radio (ada bisa lebih dari satu; misalnya, AM/FM dan satelit terpisah), gunakan queryIntentServices.

    Layanan yang telah di-resolve menangani binding android.media.browse.MediaBrowserService niat juga. Ini diverifikasi dengan GTS.

    Untuk terhubung ke MediaBrowserService yang dipilih, buat Instance MediaBrowser untuk komponen layanan tertentu dan connect. Setelah membuat koneksi, handle ke MediaSession dapat diperoleh melalui getSessionToken.

    Aplikasi Radio bisa membatasi paket klien yang diizinkan untuk terhubung dalam onGetRoot implementasi layanan mereka. Aplikasi harus mengizinkan aplikasi sistem untuk terhubung tanpa {i>whitelisting<i}. Untuk mengetahui detail tentang pemberian izin, lihat Terima paket dan tanda tangan aplikasi Asisten.

    Jika aplikasi khusus sumber (misalnya, aplikasi radio) diinstal di perangkat tanpa dukungan sumber tersebut, ia tetap akan mengiklankan dirinya sendiri sebagai intent ACTION_PLAY_BROADCASTRADIO, tetapi hierarki MediaBrowser-nya akan tidak berisi tag khusus radio. Dengan demikian, klien bersedia memeriksa apakah sumber tersedia di perangkat, harus:

    1. Temukan layanan radio (panggil resolveService untuk ACTION_PLAY_BROADCASTRADIO).
    2. Buat MediaBrowser, lalu hubungkan ke lokasi tersebut.
    3. Menentukan keberadaan MediaItem dengan EXTRA_BCRADIO_FOLDER_TYPE tambahan.

    Catatan: Pada umumnya, klien harus memindai semua hierarki MediaBrowser yang tersedia untuk mendeteksi semua sumber yang tersedia untuk perangkat tertentu.

    Nama band

    Daftar band diwakili oleh serangkaian direktori tingkat atas dengan jenis folder tag ditetapkan ke BCRADIO_FOLDER_TYPE_BAND. MediaItem mereka judul adalah string yang dilokalkan dan mewakili nama band. Dalam kebanyakan kasus akan sangat diperlukan sama dengan terjemahan bahasa Inggris, tetapi klien tidak dapat bergantung pada asumsi tersebut.

    Untuk menyediakan mekanisme yang stabil untuk mencari pita tertentu, tag tambahan ditambahkan untuk folder tali, EXTRA_BCRADIO_BAND_NAME_EN. Ini adalah nama tali yang tidak dilokalkan dan hanya dapat mengambil salah satu nilai yang telah ditentukan berikut:

    • AM
    • FM
    • DAB

    Jika talinya tidak ada dalam daftar ini, tag nama tali tidak boleh disetel. Namun, jika talinya ada dalam daftar, tali tersebut harus memiliki satu tag. Radio HD tidak menghitung pita terpisah karena menggunakan media dasar yang sama dengan AM/FM.

    Intent putar umum

    Setiap aplikasi yang dikhususkan untuk memutar sumber tertentu (seperti radio atau CD) harus menangani maksud play umum untuk mulai memutar konten yang mungkin berasal dari keadaan tidak aktif (misalnya, setelah booting). Aplikasi dapat memilih konten yang akan putar, namun biasanya berupa program radio atau trek CD yang baru diputar.Ada yang ditentukan untuk setiap sumber audio:

    • android.car.intent.action.PLAY_BROADCASTRADIO
    • android.car.intent.action.PLAY_AUDIOCD: CD-DA atau CD-Text
    • android.car.intent.action.PLAY_DATADISC: Disk data optik CD/DVD, tetapi bukan CD-DA (mungkin CD Mode Campuran)
    • android.car.intent.action.PLAY_AUX: Tanpa menentukan Port AUX
    • android.car.intent.action.PLAY_BLUETOOTH
    • android.car.intent.action.PLAY_USB: Tanpa menentukan Perangkat USB
    • android.car.intent.action.PLAY_LOCAL: Penyimpanan media lokal (flash bawaan)

    {i>Intent<i} dipilih untuk digunakan pada perintah {i>play<i} umum, karena mereka memecahkan dua masalah sekaligus: perintah {i>play<i} umum itu sendiri dan penemuan layanan. Manfaat tambahan dari memiliki intent tersebut adalah kemungkinan untuk mengeksekusi tindakan sederhana tanpa membuka sesi MediaBrowser.

    Penemuan layanan sebenarnya adalah masalah yang lebih penting yang diselesaikan dengan intent. Prosedur untuk penemuan layanan mudah dan tegas dengan cara ini (lihat Koneksi layanan dan penemuan).

    Untuk membuat beberapa implementasi klien lebih mudah, ada cara alternatif untuk memberikan perintah Play tersebut (yang juga harus diimplementasikan oleh aplikasi radio): mengeluarkan playFromMediaId dengan rootId node root (digunakan sebagai ID media). Sementara node root tidak dimaksudkan untuk dapat diputar, rootId-nya adalah string arbitrer yang dapat dibuat untuk dapat digunakan sebagai mediaId. Namun, klien tidak harus untuk memahami nuansa ini.

    Pemilih Program

    Meskipun mediaId sudah cukup untuk memilih saluran dari MediaBrowserService, model terikat dengan sesi dan tidak konsisten antar-penyedia. Dalam beberapa kasus, klien mungkin memerlukan pointer absolut (seperti frekuensi absolut) untuk mempertahankannya di antara sesi dan perangkat.

    Pada era siaran radio digital, frekuensi biasa saja tidak cukup untuk men-tuning stasiun tertentu. Oleh karena itu, gunakan ProgramSelector untuk menyesuaikan ke saluran analog atau digital. ProgramSelector terdiri dari dua bagian:

    • ID utama. ID yang unik dan stabil untuk radio tertentu stasiun yang tidak berubah tetapi mungkin tidak cukup untuk men-tuning ke stasiun itu. Misalnya, kode RDS PI, yang dapat diterjemahkan menjadi tanda panggil di AS.
    • ID sekunder. ID tambahan yang berguna untuk penyesuaian ke stasiun tersebut (misalnya, frekuensi), mungkin termasuk ID dari teknologi radio. Misalnya, stasiun DAB mungkin memiliki penggantian penyiaran analog.

    Untuk memungkinkan ProgramSelector sesuai dengan MediaBrowser- atau Solusi berbasis MediaSession, tentukan skema URI untuk melakukan serialisasi. Skemanya adalah didefinisikan sebagai berikut:

    broadcastradio://program/<primary ID type>/<primary ID>?
    <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>
    

    Dalam contoh ini, bagian ID sekunder (setelah tanda tanya (?)) adalah opsional dan dapat dihapus untuk memberikan ID yang stabil untuk digunakan sebagai mediaId. Contoh:

    • broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=88500&AMFM_FREQUENCY=103300
    • broadcastradio://program/AMFM_FREQUENCY/102100
    • broadcastradio://program/DAB_SID_EXT/14895264?RDS_PI=1234

    Bagian otoritas (host alias) program memberikan sejumlah ruang bagi perluasan skema di masa mendatang. String jenis ID ditentukan secara tepat sebagai nama mereka dalam definisi HAL 2.x dari IdentifierType dan nilai formatnya adalah angka desimal atau heksadesimal (dengan awalan 0x).

    Semua ID khusus vendor diwakili oleh VENDOR_ . Misalnya, VENDOR_0 untuk VENDOR_START dan VENDOR_1 untuk VENDOR_START ditambah 1. URI tersebut spesifik untuk perangkat keras radio tempatnya dihasilkan dan tidak dapat ditransfer antar perangkat yang dibuat oleh OEM yang berbeda.

    URI ini harus ditetapkan untuk setiap MediaItem pada radio level atas folder. Selain itu, MediaSession harus mendukung playFromMediaId dan playFromUri. Namun, URI terutama ditujukan untuk radio ekstraksi metadata (seperti frekuensi FM) dan penyimpanan persisten. Tidak ada menjamin URI akan tersedia untuk semua item media (misalnya, saat Jenis ID belum didukung oleh framework). Di sisi lain, ID Media selalu berfungsi. Klien tidak disarankan menggunakan URI untuk memilih item dari sesi MediaBrowser saat ini. Sebagai gantinya, gunakan playFromMediaId. Meskipun begitu, ini adalah tidak opsional bagi aplikasi yang melakukan penayangan dan URI yang tidak ada disediakan untuk kasus yang diratakan dengan baik.

    Desain awal menggunakan titik dua, bukan urutan :// setelah bagian skema. Namun, yang pertama tidak didukung oleh android.net.Uri untuk referensi URI hierarki absolut.

    Jenis sumber lainnya

    Sumber audio lain dapat ditangani dengan cara serupa. Misalnya, input tambahan dan pemutar CD Audio.

    Satu aplikasi dapat menyajikan beberapa jenis sumber. Dalam kasus tersebut, disarankan Anda membuat file MediaBrowserService terpisah untuk setiap jenis sumber. Bahkan dalam penyiapan dengan banyak sumber penyaluran/MediaBrowserServices, sangat disarankan untuk memiliki satu MediaSession dalam satu .

    CD Audio

    Mirip dengan CD Audio karena aplikasi yang melayani {i>disk<i} itu akan mengekspos MediaBrowser dengan satu entri yang dapat dijelajahi (atau lebih, jika sistem memiliki Pengubah CD), yang kemudian akan berisi semua trek dari CD tertentu. Jika sistem tidak memiliki pengetahuan tentang trek di setiap CD (misalnya, ketika semua disk dimasukkan ke dalam kartrid sekaligus dan tidak membaca semuanya), kemudian MediaItem untuk seluruh disk hanya akan menjadi PLAYABLE, bukan BROWSABLE dan PLAYABLE. Jika tidak ada {i>disk<i} di slot yang diberikan, item tidak akan menjadi PLAYABLE atau BROWSABLE (tetapi setiap slot harus selalu ada di hierarki).

     Struktur hierarki CD audio
    Gambar 3. Struktur hierarki CD audio.

    Entri ini akan ditandai dengan cara yang sama seperti folder radio siaran adalah; kolom tersebut akan berisi kolom tambahan tambahan yang ditentukan dalam MediaDescription API:

    • EXTRA_CD_TRACK: Untuk setiap MediaItem di CD Audio, 1 berdasarkan nomor trek.
    • EXTRA_CD_DISK: Nomor disk berbasis 1.

    Untuk sistem yang mendukung CD-Text dan disk yang kompatibel, MediaItem tingkat atas akan memiliki judul {i>disk<i}. Demikian pula, MediaItems untuk jalur, akan memiliki judul lagu.

    Input tambahan

    Aplikasi yang menyajikan input tambahan mengekspos hierarki MediaBrowser dengan satu entri (atau lebih, jika ada beberapa porta) yang mewakili AUX di porta. MediaSession masing-masing mengambil mediaId dan beralih ke sumber tersebut setelah mendapatkan permintaan playFromMediaId.

    Struktur pohon AUX
    Gambar 4. Struktur hierarki AUX.

    Setiap entri MediaItem AUX akan memiliki bidang tambahan EXTRA_AUX_PORT_NAME ditetapkan ke nama port yang tidak dilokalkan tanpa "AUX" frasa. Misalnya, "AUX 1" akan diatur ke "1", "AUX" depan" ke "depan" dan "AUX" menjadi string kosong. Dalam lokalitas non-Inggris, nama tetap menggunakan string bahasa Inggris yang sama. Tidak mungkin untuk EXTRA_BCRADIO_BAND_NAME_EN, nilainya ditentukan oleh OEM dan bukan dibatasi ke daftar yang telah ditentukan sebelumnya.

    Jika perangkat keras itu dapat mendeteksi perangkat yang terhubung ke porta AUX, perangkat keras itu harus MediaItem sebagai PLAYABLE, hanya jika input terhubung. Perangkat keras harus masih dienumerasi (tetapi bukan PLAYABLE) jika tidak ada yang terhubung porta. Jika perangkat keras tidak memiliki kemampuan itu, MediaItem harus selalu diatur ke PLAYABLE.

    Kolom tambahan

    Tentukan kolom berikut:

    • EXTRA_CD_TRACK = "android.media.extra.CD_TRACK"
    • EXTRA_CD_DISK = "android.media.extra.CD_DISK"
    • EXTRA_AUX_PORT_NAME = "android.media.extra.AUX_PORT_NAME"

    Klien perlu meninjau MediaItems tingkat atas untuk elemen yang memiliki EXTRA_CD_DISK atau EXTRA_AUX_PORT_NAME kolom tambahan atur.

    Contoh mendetail

    Contoh berikut membahas struktur hierarki MediaBrowser untuk jenis sumber yang sebagai bagian dari desain ini.

    Radio siaran MediaBrowserService (menangani ACTION_PLAY_BROADCASTRADIO):

    • Stasiun (dapat dijelajahi)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
      • URI BBC One (dapat diputar): broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
      • URI ABC 88.1 (dapat dimainkan): broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
      • URI ABC 88.1 HD1 (dapat dimainkan): broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
      • URI ABC 88.1 HD2 (dapat dimainkan): broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
      • 90,5 FM (dapat diputar) - FM tanpa RDSURI: broadcastradio://program/AMFM_FREQUENCY/90500
      • URI 620 AM (dapat diputar): broadcastradio://program/AMFM_FREQUENCY/620
      • URI BBC One (dapat diputar): broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
    • Favorit (dapat dijelajahi, diputar)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
      • URI BBC One (dapat diputar): broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
      • URI Two (tidak dapat diputar): broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
    • AM (dapat dijelajahi, diputar): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
      • URI 530 AM (dapat diputar): broadcastradio://program/AMFM_FREQUENCY/530
      • URI 540 AM (dapat diputar): broadcastradio://program/AMFM_FREQUENCY/540
      • URI 550 AM (dapat diputar): broadcastradio://program/AMFM_FREQUENCY/550
    • FM (dapat dijelajahi, diputar): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
      • URI 87.7 FM (dapat diputar): broadcastradio://program/AMFM_FREQUENCY/87700
      • URI 87.9 FM (dapat diputar): broadcastradio://program/AMFM_FREQUENCY/87900
      • URI 88.1 FM (dapat diputar): broadcastradio://program/AMFM_FREQUENCY/88100
    • DAB (dapat diputar): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"

    CD Audio MediaBrowserService (menangani ACTION_PLAY_AUDIOCD):

    • Disk 1 (dapat diputar) EXTRA_CD_DISK=1
    • Disk 2 (dapat dijelajahi, diputar) EXTRA_CD_DISK=2
      • Trek 1 (dapat diputar) EXTRA_CD_TRACK=1
      • Trek 2 (dapat diputar) EXTRA_CD_TRACK=2
    • CD musik saya (dapat dijelajahi, diputar) EXTRA_CD_DISK=3
      • Semuanya Sendiri (dapat dimainkan) EXTRA_CD_TRACK=1
      • Reise, Reise (dapat dimainkan) EXTRA_CD_TRACK=2
    • Slot kosong 4 (tidak dapat diputar) EXTRA_CD_DISK=4

    AUX MediaBrowserService (menangani ACTION_PLAY_AUX):

    • AUX depan (dapat diputar) EXTRA_AUX_PORT_NAME="front"
    • AUX belakang (dapat diputar) EXTRA_AUX_PORT_NAME="rear"