L'implementazione del controllo della radio si basa su MediaSession
e
MediaBrowse
, che consentono alle app di contenuti multimediali e di assistenti vocali di controllare la radio. Per ulteriori informazioni, consulta
Creare app multimediali per le auto su developer.android.com.
Un'implementazione dell'albero di navigazione dei contenuti multimediali è fornita nella libreria car-broadcastradio-support
in packages/apps/Car/libs
. Questa libreria contiene anche estensioni di ProgramSelector per la conversione in e da URI. Per le implementazioni radio, è consigliabile utilizzare questa libreria per creare la struttura di navigazione associata.
Selettore di sorgenti multimediali
Per garantire una transizione senza interruzioni tra la radio e le altre app visualizzate nei contenuti multimediali,
la raccolta car-media-common contiene classi che devono essere integrate nell'app radio. MediaAppSelectorWidget
può essere incluso nel file XML dell'app radio
(l'icona e il menu a discesa utilizzati nelle app di riferimento per contenuti multimediali e 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" />
Questo widget avvia AppSelectionFragment
, che mostra un elenco di origini multimediali a cui è possibile passare. Se vuoi un'interfaccia utente diversa da quella fornita,
puoi creare un widget personalizzato per avviare AppSelectionFragment
quando deve essere visualizzato il selettore.
AppSelectionFragment newFragment = AppSelectionFragment.create(widget, packageName, fullScreen); newFragment.show(mActivity.getSupportFragmentManager(), null);
Un'implementazione di esempio è fornita nell'implementazione dell'app radio di riferimento,
che si trova in packages/apps/Car/Radio
.
Specifiche del controllo dettagliato
L'interfaccia MediaSession
(tramite MediaSession.Callback
)
fornisce meccanismi di controllo per il programma radiofonico attualmente in riproduzione:
onPlay
,onStop
. Attiva/disattiva l'audio della riproduzione radio.onPause
. Messa in pausa con spostamento nel tempo (se supportata).onPlayFromMediaId
. Riproduci qualsiasi contenuto da una cartella di primo livello. Ad esempio, "Fammi ascoltare la radio FM" o "Fammi ascoltare la radio".onPlayFromUri
. Riproduci una frequenza specifica. Ad esempio, "Fammi ascoltare 88.5 FM".onSkipToNext
,onSkipToPrevious
. Sintonizzarsi su una stazione successiva o precedente.onSetRating
. Aggiungi o rimuovi elementi dai preferiti.
MediaBrowser espone un MediaItem regolabile su tre tipi di directory di primo livello:
- (Facoltativo) Programmi (stazioni). Questa modalità viene in genere utilizzata dalle radio con doppio sintonizzatore per indicare tutte le stazioni radio sintonizzabili disponibili nella località dell'utente.
- Preferiti. I programmi radio aggiunti all'elenco Preferiti, alcuni potrebbero non essere disponibili (fuori dall'area di ricezione).
- Canali di banda. Tutti i canali fisicamente possibili nella regione attuale (87,9, 88,1, 88,3, 88,5, 88,7, 88,9, 89,1 e così via). Ogni gruppo ha una directory di primo livello separata.
Ogni elemento di ciascuna di queste cartelle (AM/FM/Programmi) è un MediaItem con un URI che può essere utilizzato con MediaSession per l'impostazione. Ogni cartella di primo livello (AM/FM/Programmi) è un MediaItem con un mediaId che può essere utilizzato con MediaSession per attivare la riproduzione ed è a discrezione dell'OEM. Ad esempio, "Fammi ascoltare FM", "Fammi ascoltare AM" e "Fammi ascoltare la radio" sono tutte query radio non specifiche che utilizzano un mediaId da inviare all'app radio OEM. Spetta all'app radio determinare cosa riprodurre dalla richiesta generica e dal mediaId.
MediaSession
Poiché non esiste il concetto di messa in pausa di uno stream di trasmissione, le azioni Riproduci, Metti in pausa e Interrompi non si applicano sempre alla radio. Con la radio, l'azione Interrompi è associata al silenziamento dello stream, mentre Riproduci è associata alla rimozione del silenziamento.
Alcuni sintonizzatori radio (o app) offrono la possibilità di simulare la messa in pausa di uno stream di trasmissione memorizzando i contenuti nella cache e riproducendoli in un secondo momento. In questi casi, utilizza onPause
.
La riproduzione da azioni mediaId e URI è pensata per sintonizzarsi su una stazione acquisita dall'interfaccia MediaBrowser. mediaId è una stringa arbitraria fornito dall'app radio per imporre un valore univoco (in modo che un determinato ID indichi un solo elemento) e stabile (in modo che un determinato elemento abbia lo stesso ID per l'intera sessione) con cui identificare una determinata stazione. L'URI avrà uno schema ben definito. In breve, una forma URI di ProgramSelector. Sebbene questo preveda l'attributo univocità, non deve essere stabile, anche se può cambiare quando la stazione passa a una frequenza diversa.
Per impostazione predefinita, onPlayFromSearch
non viene utilizzato. È responsabilità del client (app complementare) selezionare un risultato di ricerca dall'albero di MediaBrowser. Trasferire questa responsabilità all'app radio aumenterebbe la complessità, richiederebbe contratti formali su come devono essere visualizzate le query di stringa e comporterebbe un'esperienza utente non uniforme su piattaforme hardware diverse.
Nota: l'app radio non contiene informazioni aggiuntive utili per cercare il nome di una stazione non esposta al client tramite l'interfaccia MediaBrowser.
Il passaggio alla stazione successiva o precedente dipende dal contesto attuale:
- Quando un'app è sintonizzata su una stazione dall'elenco Preferiti, può passare alla stazione successiva nell'elenco Preferiti.
- Se ascolti una stazione dall'elenco dei programmi, potresti sintonizzarti sulla stazione successiva disponibile, ordinata in base al numero di canale.
- L'ascolto di un canale arbitrario potrebbe comportare l'aggiornamento al canale fisico successivo, anche se non è presente alcun segnale di trasmissione.
L'app radio gestisce queste azioni.
Gestione degli errori
TransportControls
(Riproduci, Interrompi e Avanti) non fornisce un feedback sul buon esito o meno dell'azione. L'unico modo per indicare un errore è impostare lo stato MediaSession su STATE_ERROR
con un messaggio di errore.
L'app radio deve gestire queste azioni ed eseguirle o impostare uno stato di errore.
Se l'esecuzione del comando Riproduci non è immediata, lo stato di riproduzione deve essere impostato su
STATE_CONNECTING
(in caso di sintonizzazione diretta) o
STATE_SKIPPING_TO_PREVIOUS
o
NEXT
durante l'esecuzione del comando.
Il cliente deve guardare
PlaybackState
e verificare che la sessione abbia modificato il programma corrente in base a quanto richiesto o inserito nello stato di errore. STATE_CONNECTING
non deve superare i 30 secondi. Tuttavia, la sintonizzazione diretta su una determinata frequenza AM/FM dovrebbe essere molto più rapida.
Aggiungere e rimuovere preferiti
MediaSession supporta la classificazione, che può essere utilizzata per controllare i preferiti. onSetRating
chiamata con una valutazione di tipo
RATING_HEART
aggiunge o rimuove la stazione attualmente sintonizzata dall'elenco Preferiti o viceversa.
A differenza dei preset precedenti, questo modello presuppone un elenco di preferiti non ordinato e illimitato, in cui ogni preferito salvato è stato allocato a uno slot numerico (in genere da 1 a 6).
Di conseguenza, i sistemi basati su impostazioni predefinite non sono compatibili con il funzionamento di onSetRating
.
La limitazione dell'API MediaSession è che solo la stazione attualmente sintonizzata può essere aggiunta o rimossa. Ad esempio, gli elementi devono essere selezionati prima di poter essere rimossi. Si tratta solo di una limitazione del client MediaBrowser, ad esempio un'app complementare. L'app radio non è soggetta a limitazioni simili. Questa parte è facoltativa quando un'app non supporta i preferiti.
MediaBrowser
Per indicare quali frequenze o nomi di canali fisici (quando la sintonizzazione su un canale arbitrario è adatta per una determinata tecnologia radio) sono validi per una determinata regione, tutti i canali (frequenze) validi sono elencati per ogni banda. Nella regione degli Stati Uniti, si tratta di 101 canali FM nell'intervallo da 87,8 a 108,0 MHz (con spaziatura di 0,2 MHz) e 117 canali AM nell'intervallo da 530 a 1700 kHz (con spaziatura di 10 kHz). Poiché la radio HD utilizza lo stesso spazio del canale, non viene presentata separatamente.
L'elenco dei programmi radio attualmente disponibili è piatto in quanto non consente schemi di visualizzazione come il raggruppamento per ensemble DAB (Digital Audio Broadcasting).
Le voci nell'elenco Preferiti potrebbero non essere regolabili. Ad esempio, se un determinato programma non rientra nell'intervallo. L'app radio potrebbe o meno rilevare se è possibile sintonizzare la voce in anticipo. In questo caso, la voce potrebbe non essere contrassegnata come riproducibile.
Per identificare le cartelle di primo livello, viene applicato lo stesso meccanismo utilizzato dal Bluetooth.
In altre parole, un bundle Extra dell'oggetto
MediaDescription
contiene un campo specifico per l'accordatore, proprio come il Bluetooth con
EXTRA_BT_FOLDER_TYPE
.
Nel caso della radio, questo porta alla definizione dei seguenti nuovi campi nell'API pubblica:
EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE"
. Uno dei seguenti valori:BCRADIO_FOLDER_TYPE_PROGRAMS = 1
. Programmi attualmente disponibili.BCRADIO_FOLDER_TYPE_FAVORITES = 2
. Preferiti.BCRADIO_FOLDER_TYPE_BAND = 3
. Tutti i canali fisici per una determinata banda.
Non è necessario definire campi di metadati personalizzati specifici per la radio, poiché tutti i dati pertinenti rientrano nello schema
MediaBrowser.MediaItem
esistente:- Nome del programma (RDS PS, nome del servizio DAB).
MediaDescription.getTitle
. - Frequenza FM. URI (vedi
ProgramSelector) o
MediaDescription.getTitle
(se una voce si trova nella cartellaBROADCASTRADIO_FOLDER_TYPE_BAND
). - Identificatori specifici per le radio (RDS PI, DAB SId).
MediaDescription.getMediaUri
analizzato in ProgramSelector.
In genere, non è necessario recuperare la frequenza FM per una voce del programma corrente o dell'elenco Preferiti (poiché il client deve operare sugli ID media). Tuttavia, se si dovessero verificare queste esigenze (ad esempio, per la visualizzazione), il valore è presente nell'URI e può essere analizzato in
ProgramSelector
. Detto questo, non è consigliabile utilizzare l'URI per selezionare elementi all'interno della sessione corrente. Per maggiori dettagli, consultaProgramSelector
.Per evitare problemi di prestazioni o relativi al binder, il servizio MediaBrowser deve supportare la paginazione:
EXTRA_PAGE
EXTRA_PAGE_SIZE
- Parametri aggiuntivi per
subscribe()
Nota: per impostazione predefinita, la paginazione è implementata nella variante
onLoadChildren()
senza gestione delle opzioni.Le voci correlate di tutti i tipi di elenchi (canali non elaborati, programmi trovati e preferiti) possono avere mediaId diversi (dipende dall'app di radio; la biblioteca di supporto li avrà diversi). Gli URI (nel modulo ProgramSelector) differiscono tra i canali non elaborati e i programmi trovati nella maggior parte dei casi (ad eccezione della FM senza RDS), ma sono per lo più uguali tra i programmi trovati e i preferiti (ad eccezione, ad esempio, quando l'AF è stato aggiornato).
Avere mediaId diversi per le voci di diversi tipi di elenchi consente di eseguire azioni diverse su di essi. Puoi sfogliare l'elenco Preferiti o l'elenco Tutti i programmi su
onSkipToNext
, a seconda della cartella diMediaItem
selezionata di recente (vedi MediaSession).Azioni di accordatura speciali
L'elenco dei programmi consente agli utenti di sintonizzarsi su una stazione specifica, ma non consente di effettuare richieste generali come "Sintonizza su FM", che potrebbe comportare la sintonizzazione su una stazione ascoltata di recente sulla banda FM.
Per supportare queste azioni, alcune directory di primo livello hanno il flag
FLAG_PLAYABLE
impostato (insieme aFLAG_BROWSABLE
per le cartelle).Azione Sintonizza su Come emettere Ascoltare la radio Qualsiasi canale radio startService(ACTION_PLAY_BROADCASTRADIO)
OPPURE
playFromMediaId(MediaBrowser.getRoot())
Fammi ascoltare la radio FM Qualsiasi canale FM Riproduci dalla frequenza mediaId
della banda FM.La scelta del programma da sintonizzare è a discrezione dell'app. In genere, si tratta del canale sintonizzato più di recente nell'elenco specificato. Per informazioni dettagliate su
ACTION_PLAY_BROADCASTRADIO
, consulta Intent di gioco generali.Discovery e connessione dei servizi
PackageManager
può trovare direttamente l'albero MediaBrowserService che pubblica la radio broadcasting. Per farlo, chiamaresolveService
con l'intentACTION_PLAY_BROADCASTRADIO
(vedi Intent di riproduzione generale) e il flagMATCH_SYSTEM_ONLY
. Per trovare tutti i servizi che trasmettono radio (potrebbero essere più di uno, ad esempio AM/FM e satellitari separati), usaqueryIntentServices
.Il servizio risolto gestisce anche l'intent
android.media.browse.MediaBrowserService
bind. Questo viene verificato con il GTS.Per connetterti a MediaBrowserService selezionato, crea un'istanza
MediaBrowser
per un determinato componente di servizio econnect
. Dopo aver stabilito la connessione, è possibile ottenere un handle per MediaSession tramitegetSessionToken
.L'app Radio può limitare i pacchetti client autorizzati a connettersi in un'implementazione
onGetRoot
del servizio. L'app dovrebbe consentire alle app di sistema di connettersi senza essere inserite nella lista consentita. Per maggiori dettagli sull'inserimento nella lista consentita, consulta Accettare il pacchetto e la firma dell'app Assistente.Se l'app specifica per l'origine (ad esempio un'app di radio) è installata su un dispositivo senza l'appoggio di questa origine, continuerà a pubblicizzarsi come gestore dell'intent
ACTION_PLAY_BROADCASTRADIO
, ma la sua struttura MediaBrowser non conterrà i tag specifici per la radio. Pertanto, un client che vuole verificare se una determinata fonte è disponibile su un dispositivo deve:- Scopri il servizio radio (chiamare
resolveService
perACTION_PLAY_BROADCASTRADIO
). - Crea
MediaBrowser
e connettiti. - Determina la presenza di
MediaItem
conEXTRA_BCRADIO_FOLDER_TYPE
extra.
Nota: nella maggior parte dei casi, il client deve eseguire la scansione di tutti gli alberi MediaBrowser disponibili per rilevare tutte le sorgenti disponibili per un determinato dispositivo.
Nomi delle bande
L'elenco di bande è rappresentato da un insieme di directory di primo livello con un tag di tipo di cartella impostato su
BCRADIO_FOLDER_TYPE_BAND
. I titoli deiMediaItem
sono stringhe localizzate che rappresentano i nomi delle bande. Nella maggior parte dei casi sarà uguale alla traduzione in inglese, ma il cliente non può fare affidamento su questa supposizione.Per fornire un meccanismo stabile per la ricerca di determinate bande, viene aggiunto un tag extra per le cartelle delle bande,
EXTRA_BCRADIO_BAND_NAME_EN
. Si tratta di un nome non localizzato della banda e può assumere solo uno di questi valori predefiniti:AM
FM
DAB
Se la banda non è presente in questo elenco, il tag del nome della banda non deve essere impostato. Tuttavia, se il gruppo è presente nell'elenco, deve avere un tag impostato. La radio HD non elenca bande separate perché utilizza lo stesso mezzo di base di AM/FM.
Intenzioni di gioco generali
Ogni app dedicata alla riproduzione di una determinata sorgente (ad esempio radio o CD) deve gestire un intento di riproduzione generale per avviare la riproduzione di alcuni contenuti eventualmente da stato inattivo (ad esempio dopo l'avvio). Spetta all'app selezionare i contenuti da riprodurre, ma in genere si tratta del programma radio o della traccia del CD riprodotti di recente.Per ogni sorgente audio è definito un intento distinto:
android.car.intent.action.PLAY_BROADCASTRADIO
android.car.intent.action.PLAY_AUDIOCD
: CD-DA o CD-Textandroid.car.intent.action.PLAY_DATADISC
: disco dati ottico come CD/DVD, ma non CD-DA (potrebbe essere un CD in modalità mista)android.car.intent.action.PLAY_AUX
: senza specificare la porta AUXandroid.car.intent.action.PLAY_BLUETOOTH
android.car.intent.action.PLAY_USB
: senza specificare quale dispositivo USBandroid.car.intent.action.PLAY_LOCAL
: archiviazione multimediale locale (flash integrato)
Gli intent sono stati scelti per essere utilizzati per il comando di riproduzione generale perché risolvono contemporaneamente due problemi: il comando di riproduzione generale stesso e il rilevamento dei servizi. Un ulteriore vantaggio di avere questo intento sarebbe la possibilità di eseguire un'azione così semplice senza aprire la sessione MediaBrowser.
La scoperta dei servizi è in realtà il problema più importante risolto con questi intent. In questo modo, la procedura di rilevamento dei servizi è facile e inequivocabile (consulta Rilevamento e connessione dei servizi).
Per semplificare alcune implementazioni del client, esiste un modo alternativo per eseguire questo comando di riproduzione (che deve essere implementato anche dall'app radio): eseguire
playFromMediaId
con il rootId del nodo principale (utilizzato come mediaId). Anche se il nodo principale non è destinato a essere riprodotto, il suo rootId è una stringa arbitraria che può essere resa utilizzabile come mediaId. Tuttavia, i clienti non sono tenuti a comprendere questa sfumatura.ProgramSelector
Sebbene
mediaId
sia sufficiente per selezionare un canale daMediaBrowserService
, diventa vincolato a una sessione e non è coerente tra i fornitori. In alcuni casi il client potrebbe aver bisogno di un indicatore assoluto (ad esempio una frequenza assoluta) per mantenerlo tra sessioni e dispositivi.Nell'era delle trasmissioni radio digitali, una frequenza non è sufficiente per sintonizzarsi su una stazione specifica. Pertanto, usa
ProgramSelector
per sintonizzarti su un canale analogico o digitale.ProgramSelector
è costituito da due parti:- Identificatore principale. Un identificatore univoco e stabile per una determinata stazione radio che non cambia, ma potrebbe non essere sufficiente per sintonizzarti su quella stazione. Ad esempio, il codice PI RDS, che può essere tradotto in indicativo di chiamata negli Stati Uniti.
- Identificatori secondari. Identificatori aggiuntivi utili per sintonizzare la stazione (ad es. frequenza), eventualmente inclusi identificatori di altre tecnologie radio. Ad esempio, una stazione DAB potrebbe avere un fallback di trasmissione analogica.
Per consentire a
ProgramSelector
di adattarsi alla soluzione basata suMediaBrowser
oMediaSession
, definisci uno schema URI per serializzarlo. Lo schema è definito come segue:broadcastradio://program/<primary ID type>/<primary ID>? <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>
In questo esempio, la parte relativa agli identificatori secondari (dopo il punto interrogativo (
?
)) è facoltativa e può essere rimossa per fornire un identificatore stabile da utilizzare comemediaId
. Ad esempio: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
La parte di autorità (ovvero l'host) di
program
offre spazio per l'estensione dello schema in futuro. Le stringhe di tipo di identificatore sono specificate con precisione come nomi nella definizione diIdentifierType
di HAL 2.x e il formato del valore è un numero decimale o esadecimale (con prefisso0x
).Tutti gli identificatori specifici del fornitore sono rappresentati dal prefisso
VENDOR_
. Ad esempio,VENDOR_0
perVENDOR_START
eVENDOR_1
perVENDOR_START
più 1. Questi URI sono specifici per l'hardware radio su cui sono stati generati e non possono essere trasferiti da un dispositivo all'altro se sono stati prodotti da OEM diversi.Questi URI devono essere assegnati a ogni MediaItem nelle cartelle radio di primo livello. Inoltre, MediaSession deve supportare sia
playFromMediaId
cheplayFromUri
. Tuttavia, l'URI è principalmente destinato all'estrazione dei metadati radio (ad esempio la frequenza FM) e allo spazio di archiviazione permanente. Non è garantito che l'URI sarà disponibile per tutti gli elementi multimediali (ad esempio, quando il tipo di ID principale non è ancora supportato dal framework). Al contrario, l'ID media funziona sempre. È sconsigliato che i client utilizzino gli URI per selezionare elementi dalla sessione MediaBrowser corrente. Utilizza inveceplayFromMediaId
. Detto questo, non è facoltativo per l'app di pubblicazione e gli URI mancanti sono riservati a casi ben giustificati.Il progetto iniziale utilizzava un solo due punti anziché la sequenza
://
dopo la parte dello schema. Tuttavia, il primo non è supportato daandroid.net.Uri
per i riferimenti URI gerarchici assoluti.Altri tipi di origini
Altre sorgenti audio possono essere gestite in modo simile. Ad esempio, l'ingresso ausiliario e il lettore CD audio.
Una singola app può pubblicare più tipi di origini. In questi casi, consigliamo di creare un MediaBrowserService distinto per ogni tipo di origine. Anche in una configurazione con più origini/MediaBrowserServices pubblicate, è vivamente consigliato avere una singola MediaSession all'interno di un'unica app.
CD audio
È simile al CD audio in quanto l'app che gestisce questi dischi mostrerebbe MediaBrowser con una singola voce navigabile (o più, se il sistema è dotato di un cambio CD), che a sua volta conterrebbe tutte le tracce di un determinato CD. Se il sistema non conosce le tracce su ogni CD (ad esempio, quando tutti i dischi sono inseriti contemporaneamente in una cartuccia e non li legge tutti), then MediaItem per l'intero disco sarà solo
PLAYABLE
, nonBROWSABLE
piùPLAYABLE
. Se non è presente alcun disco in un determinato slot, l'elemento non sarà néPLAYABLE
néBROWSABLE
(ma ogni slot deve essere sempre presente nell'albero).Queste voci verrebbero contrassegnate in modo simile alle cartelle di radio trasmesse; conterrebbero altri campi aggiuntivi definiti nell'API MediaDescription:
EXTRA_CD_TRACK
: per ogniMediaItem
su CD audio, numero di traccia basato su 1.EXTRA_CD_DISK
: numero del disco basato su 1.
Per il sistema con CD-Text abilitato e il disco compatibile, MediaItem di primo livello avrebbe il titolo del disco. Allo stesso modo, gli elementi MediaItem per i brani avranno il titolo del brano.
Ingresso ausiliario
L'app che gestisce l'ingresso ausiliario espone un albero MediaBrowser con una singola voce (o più, se esistono più porte) che rappresenta la porta AUX in. La rispettiva MediaSession prende il suo mediaId e passa a quell'origine dopo aver ricevuto la richiesta
playFromMediaId
.Ogni voce MediaItem AUX avrà un campo aggiuntivo
EXTRA_AUX_PORT_NAME
impostato sul nome non localizzato della porta senza la frase "AUX". Ad esempio, "AUX 1" deve essere impostato su "1", "AUX front" su "front" e "AUX" su una stringa vuota. Nelle impostazioni internazionali diverse dall'inglese, il tag name rimane la stessa stringa in inglese. È improbabile che perEXTRA_BCRADIO_BAND_NAME_EN
i valori siano definiti dall'OEM e non siano vincolati a un elenco predefinito.Se l'hardware è in grado di rilevare i dispositivi connessi alla porta AUX, deve contrassegnare MediaItem come
PLAYABLE
solo se l'ingresso è collegato. L'hardware dovrebbe essere ancora enumerato (ma nonPLAYABLE
) se non è stato collegato nulla a questa porta. Se l'hardware non dispone di questa funzionalità, MediaItem deve essere sempre impostato suPLAYABLE
.Campi aggiuntivi
Definisci i seguenti campi:
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"
Il cliente deve esaminare gli elementi MediaItem di primo livello per verificare se sono impostati i campi aggiuntivi
EXTRA_CD_DISK
oEXTRA_AUX_PORT_NAME
.Esempi dettagliati
Gli esempi riportati di seguito riguardano la struttura ad albero di MediaBrowser per i tipi di origine che fanno parte di questo design.
MediaBrowserService per la radio trasmessa (gestisce
ACTION_PLAY_BROADCASTRADIO
):- Stazioni (navigabili)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
- URI di BBC One (guardabile):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
- URI di ABC 88.1 (riproducibile):
broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
- URI di ABC 88.1 HD1 (leggibile):
broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
- URI di ABC 88.1 HD2 (riproducibile):
broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
- 90.5 FM (riproducibiile) - FM senza RDSURI:
broadcastradio://program/AMFM_FREQUENCY/90500
- URI 620 AM (riproducibile):
broadcastradio://program/AMFM_FREQUENCY/620
- URI BBC One (leggibile):
broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
- URI di BBC One (guardabile):
- Preferiti (esplorabili, riproducibili)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
- URI BBC One (leggibile):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
- URI BBC Two (non riproducibile):
broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
- URI BBC One (leggibile):
- AM (esplorabile, riproducibile):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
- URI 530 AM (ascoltabile):
broadcastradio://program/AMFM_FREQUENCY/530
- URI 540 AM (riproducibile):
broadcastradio://program/AMFM_FREQUENCY/540
- URI 550 AM (leggibile):
broadcastradio://program/AMFM_FREQUENCY/550
- URI 530 AM (ascoltabile):
- FM (navigabile, riproducibile):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
- URI 87,7 FM (riproducibile):
broadcastradio://program/AMFM_FREQUENCY/87700
- 87,9 FM (ascoltabile) URI:
broadcastradio://program/AMFM_FREQUENCY/87900
- URI 88.1 FM (ascoltabile):
broadcastradio://program/AMFM_FREQUENCY/88100
- URI 87,7 FM (riproducibile):
- DAB (riproducibile):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"
MediaBrowserService per CD audio (gestisce
ACTION_PLAY_AUDIOCD
):- Disco 1 (leggibile)
EXTRA_CD_DISK=1
- Disco 2 (navigabile, riproducibile)
EXTRA_CD_DISK=2
- Traccia 1 (riproducibiile)
EXTRA_CD_TRACK=1
- Canale 2 (ascoltabile)
EXTRA_CD_TRACK=2
- Traccia 1 (riproducibiile)
- Il mio CD musicale (navigabile, riproducibile)
EXTRA_CD_DISK=3
- All By Myself (disponibile)
EXTRA_CD_TRACK=1
- Reise, Reise (disponibile)
EXTRA_CD_TRACK=2
- All By Myself (disponibile)
- Slot 4 vuoto (non riproducibile)
EXTRA_CD_DISK=4
AUX MediaBrowserService (gestisce
ACTION_PLAY_AUX
):- AUX anteriore (riproducibile)
EXTRA_AUX_PORT_NAME="front"
- AUX posteriore (riproducibile)
EXTRA_AUX_PORT_NAME="rear"