Implementazione del radiocomando

L'implementazione del controllo radio è basata su MediaSession e MediaBrowse, che consentono alle app multimediali e assistente vocale di controllare la radio. Per ulteriori informazioni, vedi Realizzare app multimediali per le auto sul sito developer.android.com.

Nel supporto auto-trasmissione radio è disponibile un'implementazione struttura di navigazione dei media raccolta in packages/apps/Car/libs. Questa libreria contiene anche estensioni di ProgramSelector per la conversione da e verso l'URI. È consigliabile che le implementazioni radio utilizza questa libreria per creare l'albero di navigazione associato.

Selettore della fonte multimediale

Per garantire una transizione perfetta tra la radio e le altre app visualizzate nei contenuti multimediali, la libreria car-media-common contiene classi che devono essere integrate nella radio dell'app. MediaAppSelectorWidget può essere incluso nel file XML dell'app della radio (l'icona e il menu a discesa utilizzati nelle app multimediali e radio di riferimento):

<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 una di fonti multimediali a cui è possibile passare. Se vuoi usare una UI diversa da quella fornita, puoi creare un widget personalizzato per avviare AppSelectionFragment quando dovrebbe essere visualizzato.

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

Un'implementazione di esempio viene fornita nell'implementazione dell'app radio di riferimento. si trova in packages/apps/Car/Radio.

Specifiche di controllo dettagliate

MediaSession (tramite MediaSession.Callback) fornisce meccanismi di controllo per il programma radio attualmente in riproduzione:

  • onPlay, onStop. (Riattiva) l'audio della riproduzione radio.
  • onPause. Pausa in differita (se supportata).
  • onPlayFromMediaId. Riproduce contenuti da una cartella di primo livello. Ad esempio, "Fammi ascoltare FM" o "Fammi ascoltare la radio".
  • onPlayFromUri. Riprodurre una frequenza specifica. Ad esempio, "Fammi ascoltare 88.5 FM".
  • onSkipToNext, onSkipToPrevious. Sintonizzati su un evento successivo o precedente stazione di noleggio.
  • onSetRating. Aggiungere o rimuovere elementi in/da Preferiti.

MediaBrowser espone un'istanza MediaItem su tre tipi di directory di primo livello:

  • (Facoltativo) Programmi (stazioni). Questa modalità è in genere utilizzata Radio con doppio sintonizzatore per indicare tutte le stazioni radio sintonizzabili disponibili nella località dell'utente.
  • Preferiti. Programmi radio aggiunti all'elenco dei preferiti; alcuni potrebbero essere non disponibile (fuori dal raggio di ricezione).
  • Canali band. Tutti i canali fisicamente possibili nella regione corrente (87,9, 88.1, 88.3, 88.5, 88.7, 88.9, 89.1 e così via). Ogni banda ha una directory di primo livello separata.
Struttura ad albero MediaBrowserService
Figura 2. Struttura ad albero di MediaBrowserService
.

Ogni elemento in ognuna di queste cartelle (AM/FM/Programmi) è un MediaItem con un URI che può essere utilizzato con MediaSession per l'ottimizzazione. Ogni cartella di primo livello (AM/FM/Programmi) è un elemento MediaItem con un mediaId che può essere utilizzato con MediaSession per attivare la riproduzione ed è a discrezione dell'OEM. Per 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 dell'OEM. Sta all'app radio stabilire cosa riprodurre dall'app una richiesta generica e il mediaId.

Sessione Media

Dato che non esiste il concetto di mettere in pausa una trasmissione, le azioni di riproduzione, pausa e interruzione non si applicano sempre alla radio. Nel caso della radio, l'azione di interruzione è associata alla disattivazione dell'audio dello stream. mentre Play è associato alla rimozione dell'audio.

Alcuni sintonizzatori radio (o app) offrono la possibilità di simulare la pausa di uno stream di trasmissioni di memorizzazione nella cache per poi riprodurli in un secondo momento. In questi casi, utilizza onPause.

La riproduzione dalle azioni mediaId e URI è destinata alla sintonizzazione su una stazione recuperati dall'interfaccia di MediaBrowser. Il mediaId è una stringa arbitraria fornito dall'app della radio per imporre un valore univoco (in modo che un determinato ID rimandi a un solo elemento) e stabile (quindi un determinato elemento ha lo stesso ID per tutta la sessione) con cui per identificare una determinata stazione. L'URI sarà di uno schema ben definito. In breve, una query di ProgramSelector. Anche se in questo modo si preserva l'attributo di uniquità, non è necessario stabile, anche se può cambiare quando la stazione si sposta a una frequenza diversa.

Per impostazione predefinita, onPlayFromSearch non viene utilizzato. È responsabilità del cliente (app companion) per selezionare un risultato di ricerca dalla struttura MediaBrowser. In movimento che la responsabilità nei confronti dell'app radio aumenterebbe la complessità, richiedesse contratti formali su come dovrebbero essere visualizzate query di stringa, generando un'esperienza utente non uniforme su hardware diversi. piattaforme di terze parti.

Nota: l'app Radio non contiene dati aggiuntivi informazioni utili per cercare il nome di una stazione non visibile al client tramite l'interfaccia di MediaBrowser.

Il passaggio alla stazione successiva o precedente dipende dal contesto corrente:

  • Quando un'app è sintonizzata su una stazione dell'elenco Preferiti, l'app può passare alla stazione successiva dall'elenco dei preferiti.
  • L'ascolto di una stazione dall'elenco Programmi può comportare la sintonizzazione sulla successiva stazione disponibile, ordinata in base al numero di canale.
  • L'ascolto di un canale arbitrario può comportare la sintonizzazione sul canale fisico successivo, anche in assenza di segnale di trasmissione.

L'app radio gestisce queste azioni.

Gestione degli errori

TransportControls azioni (Riproduci, Interrompi e Avanti) non forniscono feedback in merito al fatto che l'azione va a buon fine. L'unico modo per indicare un errore è impostare la MediaSession stato a 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 di riproduzione non è immediata, lo stato di riproduzione deve essere modificato in STATE_CONNECTING (in caso di ottimizzazione diretta) o STATE_SKIPPING_TO_PREVIOUS o NEXT durante l'esecuzione del comando.

Il cliente dovrebbe guardare PlaybackState e verificare che la sessione abbia cambiato il programma corrente in ciò che è stato richiesto o inserito nel . STATE_CONNECTING non deve superare i 30 secondi. Tuttavia, una sintonia diretta con La frequenza AM/FM dovrebbe essere molto più veloce.

Aggiungere e rimuovere preferiti

MediaSession supporta le valutazioni, che può essere utilizzata per controllare i Preferiti. onSetRating chiamata con una valutazione di tipo RATING_HEART aggiunge o rimuove la stazione attualmente sintonizzata su o dall'elenco Preferiti.

A differenza delle preimpostazioni precedenti, questo modello presuppone che siano presenti Preferiti non ordinati e illimitati , quando ogni preferito salvato è stato allocato a uno slot numerico (in genere, da 1 a 6). Di conseguenza, i sistemi basati su preset non sarebbero compatibili con onSetRating operativa.

Il limite dell'API MediaSession è che solo la stazione attualmente sintonizzata su che è possibile aggiungere o rimuovere. Ad esempio, gli elementi devono essere selezionati prima di possono essere rimossi. Si tratta solo di una limitazione del client MediaBrowser, ad esempio app complementare. L'app radio non ha limitazioni simili. Questa parte è facoltativa quando un'app non supporta i Preferiti.

MediaBrowser

Per esprimere quali frequenze o nomi di canali fisici (durante l'ottimizzazione a un canale arbitrario è adatto a una determinata tecnologia radio) sono validi per in una data regione, vengono elencati tutti i canali validi (frequenze) per ogni banda. Nella regione degli Stati Uniti, sono 101 canali FM da nella gamma di 87,8 a 108,0 MHz (con spaziatura di 0,2 MHz) e 117 canali AM nell'intervallo di 530 a 1700 kHz (con spaziatura di 10 kHz). Poiché la radio HD utilizza lo stesso spazio sul canale, non vengono presentati separatamente.

L'elenco dei programmi radio attualmente disponibili è fisso in quanto non è consentito schemi di visualizzazione, come il raggruppamento per ensemble di trasmissione audio diretta (DAB).

Le voci nell'elenco Preferiti potrebbero non essere sintonizzabili. Ad esempio, se un determinato non rientra nel raggio d'azione. L'app radio potrebbe rilevare o meno se la voce possono essere ottimizzati 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 di MediaDescription contiene un campo specifico per il sintonizzatore, proprio come il Bluetooth fa con EXTRA_BT_FOLDER_TYPE. Nel caso delle trasmissioni radiofoniche, questo porta alla definizione dei nuovi campi seguenti nella 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 di una determinata band.

    Non è necessario definire campi di metadati personalizzati specifici dei parametri radio, poiché i dati pertinenti rientrano nello schema MediaBrowser.MediaItem esistente:

    • Nome del programma (PS RDS, nome del servizio DAB). MediaDescription.getTitle.
    • Frequenza FM. URI (vedi ProgramSelector) oppure MediaDescription.getTitle (se una voce si trova nella cartella BROADCASTRADIO_FOLDER_TYPE_BAND).
    • Identificatori radio-specifici (RDS PI, DAB SId). MediaDescription.getMediaUri analizzato in ProgramSelector.

    In genere, non è necessario recuperare la frequenza FM per una voce nella programma corrente o dell'elenco dei preferiti (poiché il cliente deve operare su contenuti multimediali ID). Tuttavia, qualora dovesse emergere tale esigenza (ad esempio, a fini di visualizzazione), presenti nell'URI e possono essere analizzati per ProgramSelector. Detto questo, sconsigliamo di utilizzare l'URI per selezionare gli elementi all'interno dell'attuale durante la sessione. Per maggiori dettagli, vedi ProgramSelector.

    Per evitare problemi relativi alle prestazioni o al binder, il servizio MediaBrowser deve supportare l'impaginazione:

    Nota: per impostazione predefinita, l'impaginazione è implementata nel onLoadChildren() senza gestione delle opzioni.

    Voci correlate da tutti i tipi di elenchi (canali non elaborati, programmi trovati e preferiti) potrebbero avere mediaId diversi (spetta all'app della radio, supporto nella raccolta li avranno diversi). Gli URI (nel formato ProgramSelector) sono diversi tra canali non elaborati e programmi trovati nella maggior parte dei casi (ad eccezione di FM senza RDS), ma sono per lo più le stesse tra i programmi trovati e i preferiti (tranne, ad esempio, quando PD è stato aggiornato).

    Avere mediaId diversi per le voci provenienti da tipi di elenchi diversi rende è possibile eseguire azioni diverse. Puoi spostarti tra l'elenco dei preferiti nell'elenco Tutti i programmi su onSkipToNext, a seconda della cartella del MediaItem selezionato (vedi MediaSession).

    Azioni di ottimizzazione speciali

    L'elenco dei programmi consente agli utenti di sintonizzarsi su una stazione specifica, ma non di richieste generiche come "Sintonizzati su FM", che potrebbero comportare la sintonizzazione su un ascoltato una stazione sulla banda FM.

    Per supportare queste azioni, alcune directory di primo livello hanno FLAG_PLAYABLE flag impostato (insieme a FLAG_BROWSABLE per le cartelle).

    Azione Si sintonizza su Come emettere
    Ascoltare la radio Qualsiasi canale radio startService(ACTION_PLAY_BROADCASTRADIO)

    OPPURE

    playFromMediaId(MediaBrowser.getRoot())
    Riproduci FM Qualsiasi canale FM Riproduci da mediaId della banda FM.

    La scelta del programma da sintonizzarsi spetta all'app. Questo è in genere il canale sintonizzato più di recente nell'elenco fornito. Per maggiori dettagli su ACTION_PLAY_BROADCASTRADIO, vedi Intent di riproduzione generali.

    Rilevamento e connessione ai servizi

    PackageManager può trovare direttamente MediaBrowserService la radio broadcast albero di Natale. Per farlo, chiama resolveService con l'intent ACTION_PLAY_BROADCASTRADIO (vedi intent generali di riproduzione) e Flag MATCH_SYSTEM_ONLY. Per trovare tutti i servizi che offrono radio ( può essere più di uno: ad esempio AM/FM e satellite separati), utilizza queryIntentServices.

    Il servizio risolto gestisce l'associazione android.media.browse.MediaBrowserService per intenzione. Questo viene verificato con GTS.

    Per connetterti al MediaBrowserService selezionato, creazione MediaBrowser per un determinato componente di servizio e connect. Dopo aver stabilito la connessione, puoi ottenere un handle per MediaSession tramite getSessionToken.

    L'app Radio può limitare i pacchetti client autorizzati a connettersi in un onGetRoot dell'implementazione del proprio servizio. L'app deve consentire la connessione delle app di sistema senza autorizzazione. Per maggiori dettagli sulle autorizzazioni, consulta Accettare il pacchetto dell'app dell'assistente e la firma.

    Se l'app specifica per la fonte (ad esempio un'app per la radio) è installata su una dispositivo senza questo supporto delle fonti, si pubblicizza come a gestire ACTION_PLAY_BROADCASTRADIO, ma la relativa struttura MediaBrowser non contengano tag specifici per i segnali radio. Di conseguenza, un cliente disposto a verificare se un determinato sia disponibile su un dispositivo, deve:

    1. Scopri il servizio radio (chiama il numero resolveService per ACTION_PLAY_BROADCASTRADIO).
    2. Crea MediaBrowser e connettiti.
    3. Determina la presenza di MediaItem con EXTRA_BCRADIO_FOLDER_TYPE extra.

    Nota : nella maggior parte dei casi, il client deve analizzare tutti strutture MediaBrowser disponibili per rilevare tutte le fonti disponibili per un determinato dispositivo.

    Nomi delle bande

    L'elenco di bande è rappresentato da un insieme di directory di primo livello con un tipo di cartella impostato su BCRADIO_FOLDER_TYPE_BAND. Di MediaItem i titoli sono stringhe localizzate che rappresentano i nomi delle band. Nella maggior parte dei casi lo sarà equivale alla traduzione in inglese, ma il cliente non può dipendere da questo presupposto.

    Per fornire un meccanismo stabile per la ricerca di determinati cinturini, viene aggiunto un tag aggiuntivo per le cartelle della banda, EXTRA_BCRADIO_BAND_NAME_EN. Questo è un nome del cinturino non localizzato e può assumere solo uno di questi valori predefiniti:

    • AM
    • FM
    • DAB

    Se il cinturino non è presente nell'elenco, il tag non deve essere impostato. Tuttavia, se la banda è nell'elenco, deve avere un tag impostato. La radio HD non enumera bande separate poiché utilizza lo stesso mezzo di base di AM/FM.

    Intenzioni di gioco generiche

    Ogni app dedicata alla riproduzione di una determinata fonte (come radio o CD) deve gestire una intenzione di acquisto generale di play per iniziare a riprodurre alcuni contenuti eventualmente da stato inattivo (ad esempio, dopo l'avvio). La selezione dei contenuti da parte dell'app spetta all'app ma di solito è il programma radio o la traccia CD ascoltata di recente.È disponibile un file per intenzione definito per ogni sorgente audio:

    • android.car.intent.action.PLAY_BROADCASTRADIO
    • android.car.intent.action.PLAY_AUDIOCD: CD-DA o CD-Text
    • android.car.intent.action.PLAY_DATADISC: disco dati ottico simile CD/DVD, ma non CD-DA (potrebbe essere un CD in modalità mista)
    • android.car.intent.action.PLAY_AUX: senza specificare quale Porta AUX
    • android.car.intent.action.PLAY_BLUETOOTH
    • android.car.intent.action.PLAY_USB: senza specificare quale Dispositivo USB
    • android.car.intent.action.PLAY_LOCAL: spazio di archiviazione multimediale locale (flash integrato)

    Gli intenti sono stati scelti per il comando di riproduzione generale, perché risolvono due problemi contemporaneamente: il comando generale di riproduzione stesso e il rilevamento dei servizi. Un ulteriore vantaggio di avere tale intento sarebbe la possibilità di eseguire tali una semplice azione senza aprire la sessione MediaBrowser.

    La Service Discovery è in realtà il problema più importante risolto con questi intent. La procedura per il Service Discovery è semplice e inequivocabile in questo modo (vedi Rilevamento e connessione ai servizi).

    Per semplificare alcune implementazioni dei clienti, esiste un modo alternativo di l'emissione di questo comando Play (che deve essere implementato anche dall'app radio): emettendo playFromMediaId con il rootId del nodo principale (utilizzato come mediaId). Mentre nodo root non deve essere riproducibile, il suo rootId è una stringa arbitraria che può essere utilizzato come mediaId. Tuttavia, i clienti non sono obbligatori per comprendere questa sfumatura.

    Selettore di programmi

    Sebbene mediaId sia sufficiente per selezionare un canale da MediaBrowserService, viene associato a una sessione e non è coerente tra i fornitori. In alcuni casi, il client potrebbe aver bisogno di un puntatore assoluto (ad esempio, frequenza assoluta) per mantenerlo tra le sessioni e i dispositivi.

    Nell'era delle trasmissioni radio digitali, una frequenza nuda non è sufficiente per sintonizzarsi su una stazione specifica. Pertanto, usa ProgramSelector per ottimizzare a un canale analogico o digitale. ProgramSelector è costituito da due parti:

    • Identificatore principale. Un identificatore univoco e stabile per una determinata radio stazione che non cambia, ma potrebbe non essere sufficiente per sintonizzarsi su quella stazione. Ad esempio: Codice PI RDS, che può essere tradotto nel nominativo di chiamata negli Stati Uniti.
    • Identificatori secondari. Identificatori aggiuntivi utili per l'ottimizzazione a quella stazione (ad esempio, la frequenza), includendo eventualmente identificatori di altre tecnologie radio. Ad esempio, una stazione DAB potrebbe avere una trasmissione analogica di riserva.

    Per consentire a ProgramSelector di adattarsi a MediaBrowser- o basata su MediaSession, definisci uno schema URI per serializzarlo. Lo schema è definiti come segue:

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

    In questo esempio, la parte degli identificatori secondari (dopo il punto interrogativo (?)) è facoltativo e può essere rimosso per fornire un identificatore stabile da utilizzare come mediaId. 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 autorevole (conduttore anche noto come conduttore) di program offre spazio per un'estensione di schema in futuro. Le stringhe del tipo di identificatore sono specificate con come nomi nella definizione dell'HAL 2.x di IdentifierType e il valore è un numero decimale o esadecimale (con prefisso 0x).

    Tutti gli identificatori specifici del fornitore sono rappresentati dal simbolo VENDOR_ . Ad esempio, VENDOR_0 per VENDOR_START e VENDOR_1 per VENDOR_START più 1. Questi URI sono specifici l'hardware della radio su cui sono stati generati e non può essere trasferito da un dispositivo all'altro realizzati da OEM diversi.

    Questi URI devono essere assegnati a ciascun MediaItem nell'elenco dei pulsanti di opzione di primo livello cartelle. Inoltre, MediaSession deve supportare sia playFromMediaId e playFromUri. Tuttavia, l'URI è destinato principalmente ai segnali radio l'estrazione di metadati (come la frequenza FM) e l'archiviazione permanente. Non esiste garantire che l'URI sia disponibile per tutti gli elementi multimediali (ad esempio, quando l'URI tipo di ID non ancora supportato dal framework). D'altra parte, l'ID multimediale funziona sempre. Non è consigliabile che i client utilizzino l'URI per selezionare elementi dal sessione MediaBrowser corrente. Usa invece playFromMediaId. Detto questo, non è facoltativo per l'app di gestione e gli URI mancanti sono riservati per casi giustificati.

    Il design iniziale utilizzava singoli due punti al posto della sequenza :// dopo la parte dello schema. Tuttavia, il primo non è supportato android.net.Uri per riferimenti URI gerarchici assoluti.

    Altri tipi di origini

    Altre sorgenti audio possono essere gestite in modo simile. Ad esempio, input ausiliario e il lettore CD audio.

    Una singola app può gestire più tipi di origini. In questi casi, ti consigliamo di creare un servizio MediaBrowserService separato per ogni tipo di fonte. Anche in una configurazione con più sorgenti pubblicate/MediaBrowserServices, è vivamente consigliato di includere una singola MediaSession in un dell'app.

    CD audio

    Simile a un CD audio in quanto l'app che gestisce tali dischi esporre MediaBrowser con una singola voce sfogliabile (o più, se il sistema ha cambia CD), che a sua volta conteneva tutte le tracce di un dato CD. Se il sistema non conosce le tracce di ogni CD (ad esempio, quando tutti i dischi sono inserite in una cartuccia contemporaneamente e non le leggono tutte), quindi Il valore MediaItem per l'intero disco sarà solo PLAYABLE, non BROWSABLE più PLAYABLE. Se non ci sono dischi in una uno specifico spazio, l'elemento non sarà né PLAYABLEBROWSABLE (ma ogni area deve essere sempre presente nell'albero).

     Struttura ad albero dei CD audio
    Figura 3. Struttura ad albero dei CD audio.

    Queste voci verranno contrassegnate in modo simile a quello delle cartelle radio. sono: potrebbero contenere altri campi aggiuntivi definiti nell'API MediaDescription:

    • EXTRA_CD_TRACK: per ogni MediaItem su CD audio, Numero di traccia in base uno.
    • EXTRA_CD_DISK: numero del disco in base a 1.

    Per il sistema abilitato per CD-Text e i dischi compatibili, il MediaItem di primo livello e assegnare un titolo al disco. Allo stesso modo, i MediaItem per le tracce avrebbero titolo della traccia.

    Ingresso ausiliario

    L'app che fornisce l'input ausiliario espone una struttura MediaBrowser con una singola voce (o più, quando sono presenti più porte) che rappresenta la porta AUX in. La rispettiva MediaSession prende i suoi mediaId e passa a quell'origine dopo aver ricevuto la richiesta playFromMediaId.

    Struttura ad albero AUX
    Figura 4. Struttura ad albero AUX.

    Ogni voce AUX MediaItem avrà un campo aggiuntivo EXTRA_AUX_PORT_NAME impostato sul nome non localizzato della porta senza il terminale "AUX" a frase. Ad esempio, "AUX 1" sarebbe impostato su "1", "AUX" anteriore" su "in primo piano" e "AUX" in una stringa vuota. Nelle lingue diverse dall'inglese, il nome rimane nella stessa stringa in inglese. Improbabile per quanto riguarda EXTRA_BCRADIO_BAND_NAME_EN, i valori sono definiti dall'OEM e non vincolati a un elenco predefinito.

    Se l'hardware può rilevare dispositivi collegati alla porta AUX, l'hardware dovrebbe MediaItem come PLAYABLE, solo se l'ingresso è connesso. L'hardware deve comunque essere enumerato (ma non PLAYABLE) se non era collegato nulla una porta. Se l'hardware non dispone di tali funzionalità, MediaItem deve essere sempre impostato su PLAYABLE.

    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 i MediaItem di primo livello per verificare la presenza di elementi con EXTRA_CD_DISK o EXTRA_AUX_PORT_NAME campo aggiuntivo per iniziare.

    Esempi dettagliati

    I seguenti esempi illustrano la struttura ad albero di MediaBrowser per i tipi di origine che sono di questo design.

    Broadcast Radio MediaBrowserService (handle ACTION_PLAY_BROADCASTRADIO):

    • Stazioni (consultabili)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
      • URI BBC One (riproducibile): broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
      • URI ABC 88.1 (riproducibile): broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
      • URI ABC 88.1 HD1 (riproducibile): broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
      • URI ABC 88.1 HD2 (riproducibile): broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
      • 90,5 FM (riproducibili) - FM senza RDSURI: broadcastradio://program/AMFM_FREQUENCY/90500
      • URI 620 AM (riproducibile): broadcastradio://program/AMFM_FREQUENCY/620
      • URI BBC One (riproducibile): broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
    • Preferiti (consultabili, riproducibili)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
      • URI BBC One (riproducibile): broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
      • URI BBC Two (non riproducibile): broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
    • AM (visualizzabile, riproducibile): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
      • URI 530 AM (riproducibile): broadcastradio://program/AMFM_FREQUENCY/530
      • URI 540 AM (riproducibile): broadcastradio://program/AMFM_FREQUENCY/540
      • URI 550 AM (riproducibile): broadcastradio://program/AMFM_FREQUENCY/550
    • FM (sfogliabile, riproducibile): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
      • 87,7 FM (riproducibile) URI: broadcastradio://program/AMFM_FREQUENCY/87700
      • 87,9 FM (riproducibile) URI: broadcastradio://program/AMFM_FREQUENCY/87900
      • 88.1 FM (riproducibile) URI: broadcastradio://program/AMFM_FREQUENCY/88100
    • DAB (riproducibile): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"

    CD audio MediaBrowserService (gestisce ACTION_PLAY_AUDIOCD):

    • Disco 1 (riproducibile) EXTRA_CD_DISK=1
    • Disco 2 (utilizzabile, riproducibile) EXTRA_CD_DISK=2
      • Traccia 1 (riproducibile) EXTRA_CD_TRACK=1
      • Traccia 2 (riproducibile) EXTRA_CD_TRACK=2
    • Il mio CD musicale (consultabile, riproducibile) EXTRA_CD_DISK=3
      • Tutto da solo (riproducibile) EXTRA_CD_TRACK=1
      • Reise, Reise (riproducibile) EXTRA_CD_TRACK=2
    • Spazio vuoto 4 (non riproducibile) EXTRA_CD_DISK=4

    AUX MediaBrowserService (gestisce ACTION_PLAY_AUX):

    • Anteriore AUX (riproducibile) EXTRA_AUX_PORT_NAME="front"
    • AUX posteriore (riproducibile) EXTRA_AUX_PORT_NAME="rear"