Implementasi kontrol radio didasarkan pada MediaSession
dan
MediaBrowse
, yang memungkinkan aplikasi Media dan asisten suara
mengontrol radio. Untuk informasi selengkapnya, lihat
Membuat aplikasi media untuk mobil di developer.android.com.
Implementasi hierarki jelajah media disediakan di library car-broadcastradio-support
di packages/apps/Car/libs
. Library ini juga berisi ekstensi
ProgramSelector untuk mengonversi ke dan dari URI. Sebaiknya implementasi radio
menggunakan library ini untuk membuat hierarki penjelajahan terkait.
Pengalih sumber media
Untuk memberikan transisi yang lancar antara radio dan aplikasi lain yang ditampilkan di media,
library car-media-common berisi class yang harus diintegrasikan ke dalam aplikasi
radio. 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 kustom untuk meluncurkan AppSelectionFragment
saat
pengalih harus ditampilkan.
AppSelectionFragment newFragment = AppSelectionFragment.create(widget, packageName, fullScreen); newFragment.show(mActivity.getSupportFragmentManager(), null);
Contoh implementasi disediakan dalam implementasi aplikasi radio referensi,
yang terletak di packages/apps/Car/Radio
.
Spesifikasi kontrol mendetail
Antarmuka MediaSession
(melalui MediaSession.Callback
)
menyediakan mekanisme kontrol untuk program radio yang sedang diputar:
onPlay
,onStop
. Membisukan (atau membunyikan) pemutaran radio.onPause
. Jeda dengan pergeseran waktu (jika didukung).onPlayFromMediaId
. Memutar konten apa pun dari folder tingkat teratas. Misalnya, "Putar FM" atau "Putar Radio".onPlayFromUri
. Memutar frekuensi tertentu. Misalnya, "Putar 88,5 FM".onSkipToNext
,onSkipToPrevious
. Beralih ke stasiun berikutnya atau sebelumnya.onSetRating
. Menambahkan atau menghapus ke atau dari Favorit.
MediaBrowser mengekspos MediaItem yang dapat disesuaikan melalui tiga jenis direktori tingkat teratas:
- (Opsional) Program (stasiun). Mode ini biasanya digunakan oleh radio tuner ganda untuk menunjukkan semua stasiun radio yang dapat disetel di lokasi pengguna.
- Favorit. Program radio yang ditambahkan ke daftar Favorit, beberapa mungkin tidak tersedia (di luar jangkauan penerimaan).
- Saluran band. Semua saluran yang secara fisik memungkinkan di wilayah saat ini (87,9, 88,1, 88,3, 88,5, 88,7, 88,9, 89,1, dan seterusnya). Setiap band memiliki direktori tingkat atas yang terpisah.
Setiap elemen di setiap folder ini (AM/FM/Program) adalah MediaItem dengan URI yang dapat digunakan dengan MediaSession untuk menyetel. Setiap folder tingkat teratas (AM/FM/Program) adalah MediaItem dengan mediaId yang dapat digunakan dengan MediaSession untuk memicu pemutaran dan bergantung pada pertimbangan OEM. Misalnya, "Putar FM", "Putar AM", dan "Putar Radio" adalah kueri radio non-spesifik yang menggunakan mediaId untuk dikirim ke aplikasi radio OEM. Aplikasi radio yang menentukan apa yang akan diputar dari permintaan generik dan mediaId.
MediaSession
Karena tidak ada konsep untuk menjeda streaming siaran, tindakan Putar, Jeda, dan Hentikan tidak selalu berlaku untuk radio. Untuk radio, tindakan Berhenti dikaitkan dengan membisukan streaming sedangkan Putar dikaitkan dengan menghapus 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 stasiun yang diambil dari antarmuka MediaBrowser. mediaId adalah string arbitrer yang disediakan oleh aplikasi radio untuk menerapkan nilai unik (sehingga ID tertentu hanya mengarah ke satu item) dan stabil (sehingga item tertentu memiliki ID yang sama selama seluruh sesi) yang digunakan untuk mengidentifikasi stasiun tertentu. URI akan memiliki skema yang ditentukan dengan baik. Singkatnya, bentuk ProgramSelector yang di-URI-kan. Meskipun mempertahankan atribut keunikan, atribut ini tidak perlu stabil, meskipun dapat berubah saat stasiun berpindah ke frekuensi yang berbeda.
Secara desain, onPlayFromSearch
tidak digunakan. Klien
(aplikasi pendamping) bertanggung jawab untuk memilih hasil penelusuran dari hierarki MediaBrowser. Memindahkan
tanggung jawab tersebut ke aplikasi radio akan meningkatkan kompleksitas, memerlukan kontrak formal tentang cara
kueri string muncul, dan menghasilkan pengalaman pengguna yang tidak merata di berbagai platform
hardware.
Catatan: Aplikasi radio tidak berisi informasi tambahan yang akan berguna untuk menelusuri nama stasiun yang tidak ditampilkan kepada klien melalui antarmuka MediaBrowser.
Melewati ke stasiun berikutnya atau sebelumnya bergantung pada konteks saat ini:
- Saat aplikasi disetel ke stasiun dari daftar Favorit, aplikasi dapat berpindah ke stasiun berikutnya dari daftar Favorit.
- Mendengarkan stasiun dari Daftar program dapat menyebabkan penyesuaian ke stasiun berikutnya yang tersedia, yang diurutkan menurut nomor saluran.
- Mendengarkan saluran arbitrer dapat menyebabkan penyesuaian ke saluran fisik berikutnya, meskipun tidak ada sinyal siaran.
Aplikasi radio menangani tindakan ini.
Penanganan error
Tindakan TransportControls
(Putar, Hentikan, dan Berikutnya) tidak memberikan masukan tentang apakah tindakan
berhasil atau tidak. Satu-satunya cara untuk menunjukkan error adalah dengan menetapkan status MediaSession
ke
STATE_ERROR
dengan pesan error.
Aplikasi radio harus menangani tindakan tersebut dan menjalankannya atau menetapkan status error.
Jika perintah Play tidak langsung dieksekusi, status pemutaran harus diubah menjadi
STATE_CONNECTING
(jika penyesuaian langsung) atau
STATE_SKIPPING_TO_PREVIOUS
atau
NEXT
saat perintah dieksekusi.
Klien harus memantau
PlaybackState
dan memverifikasi bahwa sesi mengubah program saat ini menjadi program yang diminta atau dimasukkan ke dalam
status error. STATE_CONNECTING
tidak boleh melebihi 30 detik. Namun, penyesuaian langsung ke frekuensi
AM/FM tertentu akan berperforma jauh lebih cepat.
Menambahkan dan menghapus favorit
MediaSession memiliki dukungan rating, yang dapat digunakan untuk mengontrol Favorit. onSetRating
yang dipanggil dengan rating jenis
RATING_HEART
menambahkan atau menghapus stasiun yang saat ini disetel ke atau dari daftar Favorit.
Berbeda dengan preset lama, model ini mengasumsikan daftar Favorit
yang tidak diurutkan dan tidak terbatas, saat setiap favorit tersimpan dialokasikan ke slot numerik (biasanya, 1 hingga 6).
Akibatnya, sistem berbasis preset tidak akan kompatibel dengan operasi
onSetRating
.
Batasan MediaSession API adalah hanya stasiun yang saat ini disetel yang dapat ditambahkan atau dihapus. Misalnya, item harus dipilih terlebih dahulu sebelum dapat dihapus. Ini hanya batasan klien MediaBrowser, seperti aplikasi pendamping. Aplikasi radio tidak dibatasi dengan cara yang sama. Bagian ini bersifat opsional jika aplikasi tidak mendukung Favorit.
MediaBrowser
Untuk menyatakan frekuensi atau nama saluran fisik mana (saat menyetel ke saluran arbitrer yang sesuai untuk teknologi radio tertentu) yang valid untuk wilayah tertentu, semua saluran (frekuensi) yang valid dicantumkan untuk setiap band. Di wilayah Amerika Serikat, jumlah ini mencapai 101 saluran FM dari rentang 87,8 hingga 108,0 MHz (menggunakan spasi 0,2 MHz) dan 117 saluran AM dalam rentang 530 hingga 1700 kHz (menggunakan spasi 10 kHz). Karena menggunakan ruang saluran yang sama, radio HD tidak ditampilkan secara terpisah.
Daftar program radio yang saat ini tersedia bersifat datar karena tidak memungkinkan skema tampilan seperti pengelompokan menurut ensemble siaran audio langsung (DAB).
Entri di daftar Favorit mungkin tidak dapat disesuaikan. Misalnya, jika program tertentu berada di luar rentang. Aplikasi radio dapat mendeteksi atau tidak mendeteksi apakah entri dapat disetel sebelumnya. Jika demikian, entri mungkin tidak ditandai sebagai dapat diputar.
Untuk mengidentifikasi folder tingkat teratas, mekanisme yang sama dengan yang digunakan oleh Bluetooth akan diterapkan.
Artinya, paket Tambahan objek
MediaDescription
berisi kolom khusus tuner seperti yang dilakukan Bluetooth dengan
EXTRA_BT_FOLDER_TYPE
.
Dalam kasus radio siaran, hal ini akan menentukan kolom baru berikut di
API publik:
EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE"
. Salah satu 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 menentukan kolom metadata kustom 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 ada di folderBROADCASTRADIO_FOLDER_TYPE_BAND
). - ID khusus radio (RDS PI, DAB SId).
MediaDescription.getMediaUri
diuraikan ke ProgramSelector.
Biasanya, tidak perlu mengambil frekuensi FM untuk entri di program saat ini atau daftar Favorit (karena klien harus beroperasi pada ID media). Namun, jika kebutuhan tersebut muncul (misalnya, untuk tujuan tampilan), kebutuhan tersebut akan ada di URI dan dapat diuraikan ke
ProgramSelector
. Meskipun demikian, sebaiknya URI tidak digunakan untuk memilih item dalam sesi saat ini. Untuk mengetahui detailnya, lihatProgramSelector
.Untuk menghindari masalah performa atau terkait binder, layanan MediaBrowser harus mendukung penomoran halaman:
EXTRA_PAGE
EXTRA_PAGE_SIZE
- Parameter tambahan untuk
subscribe()
Catatan: Secara default, penomoran halaman diterapkan secara default dalam varian
onLoadChildren()
tanpa penanganan opsi.Entri terkait dari semua jenis daftar (channel mentah, program yang ditemukan, dan favorit) mungkin memiliki mediaId yang berbeda (tergantung aplikasi radio; library dukungan akan memiliki mediaId yang berbeda). URI (dalam bentuk ProgramSelector) berbeda antara saluran mentah dan program yang ditemukan dalam sebagian besar kasus (kecuali untuk FM tanpa RDS), tetapi sebagian besar sama antara program yang ditemukan dan favorit (kecuali, misalnya, saat AF diperbarui).
Dengan memiliki mediaId yang berbeda untuk entri dari berbagai jenis daftar, Anda dapat mengambil tindakan yang berbeda pada entri tersebut. Anda dapat menjelajahi daftar Favorit atau daftar Semua Program di
onSkipToNext
, bergantung pada folderMediaItem
yang baru saja dipilih (lihat MediaSession).Tindakan penyesuaian khusus
Daftar program memungkinkan pengguna menyetel ke stasiun tertentu, tetapi tidak mengizinkan pengguna membuat permintaan umum seperti "Tune to FM", yang dapat menyebabkan penyetelan ke stasiun yang baru saja didengarkan di band FM.
Untuk mendukung tindakan tersebut, beberapa direktori tingkat teratas memiliki flag
FLAG_PLAYABLE
yang ditetapkan (besertaFLAG_BROWSABLE
untuk folder).Tindakan Menyetel ke Cara menerbitkan Putar radio Saluran radio apa pun startService(ACTION_PLAY_BROADCASTRADIO)
ATAU,
playFromMediaId(MediaBrowser.getRoot())
Putar FM Saluran FM apa pun Putar dari mediaId
band FM.Penentuan program yang akan di-tune bergantung pada aplikasi. Biasanya, program yang baru-baru ini di-tune ke saluran dari daftar yang diberikan. Untuk mengetahui detail tentang
ACTION_PLAY_BROADCASTRADIO
, lihat Intent pemutaran umum.Penemuan dan koneksi layanan
PackageManager
dapat langsung menemukan MediaBrowserService yang menayangkan hierarki radio siaran. Untuk melakukannya, panggilresolveService
dengan intentACTION_PLAY_BROADCASTRADIO
(lihat Intent pemutaran umum) dan tandaMATCH_SYSTEM_ONLY
. Untuk menemukan semua layanan yang menayangkan radio (mungkin ada lebih dari satu; misalnya, AM/FM dan satelit terpisah), gunakanqueryIntentServices
.Layanan yang di-resolve juga menangani intent binding
android.media.browse.MediaBrowserService
. Hal ini diverifikasi dengan GTS.Untuk terhubung ke MediaBrowserService yang dipilih, buat instance
MediaBrowser
untuk komponen layanan danconnect
tertentu. Setelah membuat koneksi, handle ke MediaSession dapat diperoleh melaluigetSessionToken
.Aplikasi Radio dapat membatasi paket klien yang diizinkan untuk terhubung dalam implementasi
onGetRoot
layanan mereka. Aplikasi harus mengizinkan aplikasi sistem terhubung tanpa pemberian akses. Untuk mengetahui detail tentang daftar yang diizinkan, lihat Menerima paket dan tanda tangan aplikasi Asisten.Jika aplikasi khusus sumber (misalnya, aplikasi radio) diinstal di perangkat tanpa dukungan sumber tersebut, aplikasi akan tetap mengiklankan dirinya sebagai menangani intent
ACTION_PLAY_BROADCASTRADIO
, tetapi hierarki MediaBrowser-nya tidak akan berisi tag khusus radio. Dengan demikian, klien yang ingin memeriksa apakah sumber tertentu tersedia di perangkat harus:- Temukan layanan radio (panggil
resolveService
untukACTION_PLAY_BROADCASTRADIO
). - Buat
MediaBrowser
, lalu hubungkan ke sana. - Tentukan keberadaan
MediaItem
denganEXTRA_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 kumpulan direktori tingkat teratas dengan tag jenis folder yang ditetapkan ke
BCRADIO_FOLDER_TYPE_BAND
. JudulMediaItem
-nya adalah string yang dilokalkan yang mewakili nama band. Dalam sebagian besar kasus, terjemahan tersebut akan sama dengan terjemahan bahasa Inggris, tetapi klien tidak dapat mengandalkan asumsi tersebut.Untuk memberikan mekanisme yang stabil guna mencari band tertentu, tag tambahan ditambahkan untuk folder band,
EXTRA_BCRADIO_BAND_NAME_EN
. Ini adalah nama band yang tidak dilokalkan dan hanya dapat menggunakan salah satu nilai standar berikut:AM
FM
DAB
Jika band tidak ada dalam daftar ini, tag nama band tidak boleh ditetapkan. Namun, jika band ada dalam daftar, band tersebut harus memiliki tag yang ditetapkan. Radio HD tidak menghitung band terpisah karena menggunakan media dasar yang sama dengan AM/FM.
Intent pemutaran umum
Setiap aplikasi yang didedikasikan untuk memutar sumber tertentu (seperti radio atau CD) harus menangani intent play umum untuk mulai memutar beberapa konten yang mungkin dari status tidak aktif (misalnya, setelah booting). Cara memilih konten untuk diputar bergantung pada aplikasi, tetapi biasanya program radio atau trek CD yang baru diputar.Ada intent terpisah yang ditentukan untuk setiap sumber audio:
android.car.intent.action.PLAY_BROADCASTRADIO
android.car.intent.action.PLAY_AUDIOCD
: CD-DA atau CD-Textandroid.car.intent.action.PLAY_DATADISC
: Disk data optik seperti CD/DVD, tetapi bukan CD-DA (mungkin CD Mode Campuran)android.car.intent.action.PLAY_AUX
: Tanpa menentukan port AUXandroid.car.intent.action.PLAY_BLUETOOTH
android.car.intent.action.PLAY_USB
: Tanpa menentukan perangkat USB manaandroid.car.intent.action.PLAY_LOCAL
: Penyimpanan media lokal (flash bawaan)
Intent dipilih untuk digunakan untuk perintah pemutaran umum, karena intent menyelesaikan dua masalah sekaligus: perintah pemutaran umum itu sendiri dan penemuan layanan. Manfaat tambahan dari memiliki intent tersebut adalah kemungkinan untuk menjalankan tindakan sederhana tersebut tanpa membuka sesi MediaBrowser.
Penemuan layanan sebenarnya adalah masalah yang lebih penting yang dipecahkan dengan intent ini. Dengan cara ini, prosedur penemuan layanan menjadi mudah dan tidak ambigu (lihat Penemuan dan koneksi layanan).
Untuk mempermudah beberapa implementasi klien, ada cara alternatif untuk mengeluarkan perintah Play tersebut (yang juga harus diimplementasikan oleh aplikasi radio): mengeluarkan
playFromMediaId
dengan rootId node root (digunakan sebagai mediaId). Meskipun node root tidak dimaksudkan untuk diputar, rootId-nya adalah string arbitrer yang dapat dibuat agar dapat digunakan sebagai mediaId. Namun, klien tidak diwajibkan untuk memahami nuansa ini.ProgramSelector
Meskipun
mediaId
cukup untuk memilih saluran dariMediaBrowserService
, saluran tersebut akan terikat dengan sesi dan tidak konsisten di antara penyedia. Dalam beberapa kasus, klien mungkin memerlukan pointer absolut (seperti frekuensi absolut) untuk mempertahankannya di antara sesi dan perangkat.Di era siaran radio digital, frekuensi saja tidak cukup untuk menyetel ke stasiun tertentu. Oleh karena itu, gunakan
ProgramSelector
untuk menyetel ke saluran analog atau digital.ProgramSelector
terdiri dari dua bagian:- ID utama. ID unik dan stabil untuk stasiun radio tertentu yang tidak berubah, tetapi mungkin tidak cukup untuk menyetel ke stasiun tersebut. Misalnya, kode PI RDS, yang dapat diterjemahkan ke tanda panggil di AS.
- ID sekunder. ID tambahan yang berguna untuk menyetel ke stasiun tersebut (misalnya, frekuensi), mungkin termasuk ID dari teknologi radio lainnya. Misalnya, stasiun DAB mungkin memiliki penggantian siaran analog.
Agar
ProgramSelector
sesuai dengan solusi berbasisMediaBrowser
atauMediaSession
, tentukan skema URI untuk melakukan serialisasi. Skema ditentukan 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 (
?
)) bersifat opsional dan dapat dihapus untuk memberikan ID yang stabil untuk digunakan sebagaimediaId
. 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 (AKA host) dari
program
menyediakan beberapa ruang untuk ekstensi skema pada masa mendatang. String jenis ID ditentukan dengan tepat sebagai namanya dalam definisiIdentifierType
HAL 2.x dan format nilainya adalah angka desimal atau heksadesimal (dengan awalan0x
).Semua ID khusus vendor diwakili oleh awalan
VENDOR_
. Misalnya,VENDOR_0
untukVENDOR_START
danVENDOR_1
untukVENDOR_START
ditambah 1. URI tersebut khusus untuk hardware radio tempat URI tersebut dibuat dan tidak dapat ditransfer antar-perangkat yang dibuat oleh OEM yang berbeda.URI ini harus ditetapkan ke setiap MediaItem di folder radio tingkat teratas. Selain itu, MediaSession harus mendukung
playFromMediaId
danplayFromUri
. Namun, URI ini terutama ditujukan untuk ekstraksi metadata radio (seperti frekuensi FM) dan penyimpanan persisten. Tidak ada jaminan bahwa URI akan tersedia untuk semua item media (misalnya, jika jenis ID utama belum didukung oleh framework). Di sisi lain, ID Media selalu berfungsi. Klien tidak direkomendasikan untuk menggunakan URI guna memilih item dari sesi MediaBrowser saat ini. Sebagai gantinya, gunakanplayFromMediaId
. Meskipun demikian, hal ini tidak bersifat opsional untuk aplikasi penayangan dan URI yang tidak ada dicadangkan untuk kasus yang dibenarkan dengan baik.Desain awal menggunakan satu titik dua, bukan urutan
://
setelah bagian skema. Namun, yang pertama tidak didukung olehandroid.net.Uri
untuk referensi URI hierarkis absolut.Jenis sumber lainnya
Sumber audio lainnya dapat ditangani dengan cara yang sama. Misalnya, input tambahan dan pemutar Audio CD.
Satu aplikasi dapat menayangkan beberapa jenis sumber. Dalam kasus tersebut, sebaiknya Anda membuat MediaBrowserService terpisah untuk setiap jenis sumber. Bahkan dalam penyiapan dengan beberapa sumber/MediaBrowserService yang ditayangkan, sebaiknya gunakan satu MediaSession dalam satu aplikasi.
CD Audio
Mirip dengan Audio CD karena aplikasi yang menayangkan disk tersebut akan mengekspos MediaBrowser dengan satu entri yang dapat dijelajahi (atau lebih, jika sistem memiliki pengubah CD), yang pada akhirnya akan berisi semua trek dari CD tertentu. Jika sistem tidak memiliki pengetahuan tentang trek di setiap CD (misalnya, saat semua disk dimasukkan ke dalam kartrid sekaligus dan tidak membaca semuanya), maka MediaItem untuk seluruh disk hanya akan berupa
PLAYABLE
, bukanBROWSABLE
plusPLAYABLE
. Jika tidak ada disk di slot tertentu, item tersebut tidak akan berupaPLAYABLE
atauBROWSABLE
(tetapi setiap slot harus selalu ada dalam hierarki).Entri ini akan ditandai dengan cara yang sama seperti folder radio siaran; entri ini akan berisi kolom tambahan tambahan yang ditentukan di MediaDescription API:
EXTRA_CD_TRACK
: Untuk setiapMediaItem
di Audio CD, nomor trek berbasis 1.EXTRA_CD_DISK
: Nomor disk berbasis 1.
Untuk sistem yang mengaktifkan CD-Text dan disk yang kompatibel, MediaItem tingkat atas akan memiliki judul disk. Demikian pula, MediaItems untuk trek akan memiliki judul trek.
Input tambahan
Aplikasi yang menayangkan input tambahan mengekspos hierarki MediaBrowser dengan satu entri (atau lebih, jika ada beberapa port) yang mewakili port AUX in. MediaSession masing-masing mengambil mediaId dan beralih ke sumber tersebut setelah mendapatkan permintaan
playFromMediaId
.Setiap entri MediaItem AUX akan memiliki kolom tambahan
EXTRA_AUX_PORT_NAME
yang ditetapkan ke nama port yang tidak dilokalkan tanpa frasa "AUX". Misalnya, "AUX 1" akan disetel ke "1", "AUX depan" ke "depan", dan "AUX" ke string kosong. Di lokalitas non-Inggris, tag nama akan tetap berupa string bahasa Inggris yang sama. Tidak sepertiEXTRA_BCRADIO_BAND_NAME_EN
, nilai ditentukan oleh OEM dan tidak dibatasi pada daftar yang telah ditentukan.Jika hardware dapat mendeteksi perangkat yang terhubung ke port AUX, hardware harus menandai MediaItem sebagai
PLAYABLE
, hanya jika input terhubung. Hardware harus tetap dihitung (tetapi bukanPLAYABLE
) jika tidak ada yang terhubung ke port ini. Jika hardware tidak memiliki kemampuan tersebut, MediaItem harus selalu disetel kePLAYABLE
.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 teratas untuk elemen yang memiliki kolom tambahan
EXTRA_CD_DISK
atauEXTRA_AUX_PORT_NAME
yang ditetapkan.Contoh mendetail
Contoh berikut membahas struktur hierarki MediaBrowser untuk jenis sumber yang merupakan bagian dari desain ini.
MediaBrowserService radio siaran (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 diputar):
broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
- URI ABC 88.1 HD1 (dapat diputar):
broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
- URI ABC 88.1 HD2 (dapat diputar):
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
- URI BBC One (dapat diputar):
- Favorit (dapat dijelajahi, dapat diputar)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
- URI BBC One (dapat diputar):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
- URI BBC Two (tidak dapat diputar):
broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
- URI BBC One (dapat diputar):
- AM (dapat dijelajahi, dapat diputar):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
- 530 AM (playable) URI:
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
- 530 AM (playable) URI:
- FM (dapat dijelajahi, dapat 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
- URI 87,7 FM (dapat diputar):
- DAB (dapat diputar):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"
MediaBrowserService CD Audio (menangani
ACTION_PLAY_AUDIOCD
):- Disk 1 (dapat diputar)
EXTRA_CD_DISK=1
- Disk 2 (dapat dijelajahi, dapat diputar)
EXTRA_CD_DISK=2
- Trek 1 (dapat diputar)
EXTRA_CD_TRACK=1
- Trek 2 (dapat diputar)
EXTRA_CD_TRACK=2
- Trek 1 (dapat diputar)
- CD musik saya (dapat dijelajahi, dapat diputar)
EXTRA_CD_DISK=3
- All By Myself (dapat dimainkan)
EXTRA_CD_TRACK=1
- Reise, Reise (dapat dimainkan)
EXTRA_CD_TRACK=2
- All By Myself (dapat dimainkan)
- Slot kosong 4 (tidak dapat diputar)
EXTRA_CD_DISK=4
MediaBrowserService AUX (menangani
ACTION_PLAY_AUX
):- AUX depan (dapat diputar)
EXTRA_AUX_PORT_NAME="front"
- AUX belakang (dapat diputar)
EXTRA_AUX_PORT_NAME="rear"