La implementación del control de radio se basa en MediaSession
y MediaBrowse
, que permiten que las aplicaciones de medios y asistentes de voz controlen la radio. Para obtener más información, consulte Crear aplicaciones multimedia para automóviles en developer.android.com.
Se proporciona una implementación del árbol de exploración de medios en la biblioteca car-broadcastradio-support en packages/apps/Car/libs
. Esta biblioteca también contiene extensiones de ProgramSelector para convertir hacia y desde URI. Se recomienda que las implementaciones de radio usen esta biblioteca para construir el árbol de navegación asociado.
Conmutador de fuente de medios
Para proporcionar una transición fluida entre la radio y otras aplicaciones que se muestran en los medios, la biblioteca car-media-common contiene clases que deben integrarse en la aplicación de radio. MediaAppSelectorWidget
se puede incluir en el XML de la aplicación de radio (el icono y el menú desplegable utilizados en las aplicaciones de radio y medios de referencia):
<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" />
Este widget inicia AppSelectionFragment
, que muestra una lista de fuentes de medios a las que se puede cambiar. Si se desea una interfaz de usuario distinta a la proporcionada, puede crear un widget personalizado para iniciar AppSelectionFragment
cuando se deba mostrar el conmutador.
AppSelectionFragment newFragment = AppSelectionFragment.create(widget, packageName, fullScreen); newFragment.show(mActivity.getSupportFragmentManager(), null);
Se proporciona una implementación de muestra en la implementación de la aplicación de radio de referencia, ubicada en packages/apps/Car/Radio
.
Especificaciones de control detalladas
La MediaSession
(a través MediaSession.Callback
) proporciona mecanismos de control para el programa de radio que se está reproduciendo actualmente:
-
onPlay
,onStop
. (Des) silenciar la reproducción de radio. -
onPause
. Pausa en diferido (si se admite). -
onPlayFromMediaId
. Reproduce cualquier contenido de una carpeta de nivel superior. Por ejemplo, "Reproducir FM" o "Reproducir radio". -
onPlayFromUri
. Reproduce una frecuencia específica. Por ejemplo, "Reproducir 88.5 FM". -
onSkipToNext
,onSkipToPrevious
. Sintonice una estación anterior o siguiente. -
onSetRating
. Agregar o quitar a o de Favoritos.
MediaBrowser expone un MediaItem ajustable en tres tipos de directorios de nivel superior:
- ( Opcional ) Programas (estaciones). Este modo lo suelen utilizar las radios de doble sintonizador para indicar todas las estaciones de radio sintonizables disponibles en la ubicación del usuario.
- Favoritos. Programas de radio agregados a la lista de Favoritos, algunos pueden no estar disponibles (fuera del rango de recepción).
- Canales de banda. Todos los canales físicamente posibles en la región actual (87.9, 88.1, 88.3, 88.5, 88.7, 88.9, 89.1 y así sucesivamente). Cada banda tiene un directorio de nivel superior separado.
Cada elemento en cada una de estas carpetas (AM/FM/Programas) es un elemento multimedia con un URI que se puede usar con MediaSession para sintonizar. Cada carpeta de nivel superior (AM/FM/Programas) es un MediaItem con un mediaId que se puede usar con MediaSession para activar la reproducción y queda a discreción del OEM. Por ejemplo, "Reproducir FM", "Reproducir AM" y "Reproducir radio" son consultas de radio no específicas que usan un ID de medio para enviar a la aplicación de radio OEM. Depende de la aplicación de radio determinar qué reproducir desde la solicitud genérica y el ID de medios.
MediaSession
Dado que no existe el concepto de pausar una transmisión, las acciones Reproducir, Pausa y Detener no siempre se aplican a la radio. Con la radio, la acción Detener está asociada con silenciar la transmisión, mientras que Reproducir está asociada con eliminar el silenciamiento.
Algunos sintonizadores de radio (o aplicaciones) brindan la capacidad de simular una pausa en la transmisión al almacenar contenido en caché y luego reproducirlo más tarde. En tales casos, use onPause
.
Reproducir desde las acciones mediaId y URI está destinado a sintonizar una estación obtenida desde la interfaz de MediaBrowser. El mediaId es una cadena arbitraria proporcionada por la aplicación de radio para imponer un valor único (por lo que una identificación determinada apunta a un solo elemento) y estable (por lo que un elemento determinado tiene la misma identificación durante toda la sesión) con el que identificar una estación determinada . El URI será de un esquema bien definido. En resumen, una forma URI de ProgramSelector. Si bien esto preserva el atributo de unicidad, no necesita ser estable, aunque puede cambiar cuando la estación se mueve a una frecuencia diferente.
Por diseño, onPlayFromSearch
no se usa. Es responsabilidad del cliente (aplicación complementaria) seleccionar un resultado de búsqueda del árbol de MediaBrowser. Transferir esa responsabilidad a la aplicación de radio aumentaría la complejidad, requeriría contratos formales sobre cómo deberían aparecer las consultas de cadenas y daría como resultado una experiencia de usuario desigual en diferentes plataformas de hardware.
Nota: La aplicación de radio no contiene información adicional que sería útil para buscar el nombre de una estación no expuesta al cliente a través de la interfaz MediaBrowser.
Saltar a la estación siguiente o anterior depende del contexto actual:
- Cuando una aplicación se sintoniza en una estación de la lista de Favoritos, la aplicación puede pasar a la siguiente estación de la lista de Favoritos.
- Escuchar una estación de la lista de programas puede resultar en la sintonización de la próxima estación disponible, ordenada según el número de canal.
- Escuchar un canal arbitrario puede resultar en sintonizar el siguiente canal físico, incluso cuando no hay señal de transmisión.
La aplicación de radio maneja estas acciones.
Manejo de errores
Las acciones TransportControls
(Reproducir, Detener y Siguiente) no proporcionan información sobre si la acción se realizó correctamente o no. La única forma de indicar un error es establecer el estado de MediaSession en STATE_ERROR
con un mensaje de error.
La aplicación de radio debe manejar esas acciones y ejecutarlas o establecer un estado de error. Si la ejecución del comando Play no es inmediata, el estado de reproducción debe cambiarse a STATE_CONNECTING
(en caso de sintonización directa) o STATE_SKIPPING_TO_PREVIOUS
/ NEXT
mientras se ejecuta el comando.
El cliente debe ver PlaybackState
y verificar que la sesión cambió el programa actual a lo que se solicitó o entró en estado de error. STATE_CONNECTING
no debe exceder los 30 s. Sin embargo, una sintonización directa a una frecuencia AM/FM dada debería funcionar mucho más rápido.
Adición y eliminación de favoritos
MediaSession tiene soporte de calificación, que se puede usar para controlar los Favoritos. onSetRating
llamado con una calificación de tipo RATING_HEART
agrega o elimina la estación sintonizada actualmente ao de la lista de Favoritos.
A diferencia de los ajustes preestablecidos heredados, este modelo asume una lista de favoritos desordenada e ilimitada, cuando cada favorito guardado se asigna a una ranura numérica (normalmente, del 1 al 6). Como resultado, los sistemas basados en preajustes serían incompatibles con la operación onSetRating
.
La limitación de la API de MediaSession es que solo se puede agregar o eliminar la estación sintonizada actualmente. Por ejemplo, los elementos deben seleccionarse primero antes de que puedan eliminarse. Esta es solo una limitación del cliente MediaBrowser, como una aplicación complementaria. La aplicación de radio no está restringida de manera similar. Esta parte es opcional cuando una aplicación no admite Favoritos.
Explorador de medios
Para expresar qué frecuencias o nombres de canales físicos (cuando sintonizar un canal arbitrario es adecuado para una tecnología de radio determinada) son válidos para una región determinada, se enumeran todos los canales válidos (frecuencias) para cada banda. En la región de EE. UU., esto equivale a 101 canales de FM en el rango de 87,8 a 108,0 MHz (con un espaciado de 0,2 MHz) y 117 canales de AM en el rango de 530 a 1700 kHz (con un espaciado de 10 kHz). Debido a que la radio HD usa el mismo espacio de canal, no se presenta por separado.
La lista de programas de radio actualmente disponibles es plana en el sentido de que esto no permite esquemas de visualización como la agrupación por conjunto de transmisión directa de audio (DAB).
Es posible que las entradas de la lista de favoritos no se puedan sintonizar. Por ejemplo, si un programa dado está fuera de rango. La aplicación de radio puede o no detectar si la entrada se puede sintonizar de antemano. Si es así, es posible que no marque la entrada como jugable.
Para identificar las carpetas de nivel superior, se aplica el mismo mecanismo que utiliza Bluetooth. Es decir, un paquete Extras del objeto MediaDescription
contiene un campo específico del sintonizador tal como lo hace Bluetooth con EXTRA_BT_FOLDER_TYPE
. En el caso de la radiodifusión, esto lleva a definir los siguientes nuevos campos en la API pública:
-
EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE"
. Uno de los siguientes valores:-
BCRADIO_FOLDER_TYPE_PROGRAMS = 1
. Programas disponibles actualmente. -
BCRADIO_FOLDER_TYPE_FAVORITES = 2
. Favoritos. -
BCRADIO_FOLDER_TYPE_BAND = 3
. Todos los canales físicos para una banda determinada.
No es necesario definir ningún campo de metadatos personalizado específico de radio, ya que todos los datos relevantes se ajustan al esquema
MediaBrowser.MediaItem
existente:- Nombre del programa (RDS PS, nombre del servicio DAB).
MediaDescription.getTitle
. - frecuencia FM. URI (ver ProgramSelector ) o
MediaDescription.getTitle
(si una entrada está en la carpetaBROADCASTRADIO_FOLDER_TYPE_BAND
). - Identificadores específicos de radio (RDS PI, DAB SId).
MediaDescription.getMediaUri
analizado en ProgramSelector.
Por lo general, no es necesario buscar la frecuencia FM para una entrada en el programa actual o en la lista de favoritos (ya que el cliente debe operar con ID de medios). Sin embargo, si surgiera tal necesidad (por ejemplo, con fines de visualización), está presente en el URI y se puede analizar en
ProgramSelector
. Dicho esto, no se recomienda utilizar el URI para seleccionar elementos dentro de la sesión actual. Para obtener más información, consulte Selector de programas.Para evitar problemas relacionados con el rendimiento o el enlazador, el servicio MediaBrowser debe admitir la paginación:
-
EXTRA_PAGE
-
EXTRA_PAGE_SIZE
- Parámetros extra para
subscribe()
Nota: De forma predeterminada, la paginación se implementa de forma predeterminada en la variante
onLoadChildren()
sin manejo de opciones.Las entradas relacionadas de todos los tipos de listas (canales sin procesar, programas encontrados y favoritos) pueden tener ID de medios diferentes (depende de la aplicación de radio; la biblioteca de soporte los tendrá diferentes). Los URI (en forma de ProgramSelector) serán diferentes entre los canales sin procesar y los programas encontrados en la mayoría de los casos (excepto FM sin RDS); pero casi lo mismo entre los programas encontrados y los favoritos (excepto, por ejemplo, cuando se actualizó AF).
Tener diferentes mediaIds para entradas de diferentes tipos de listas hace posible realizar diferentes acciones en ellas. Puede recorrer la lista de Favoritos o la lista de Todos los programas en
onSkipToNext
, según la carpeta delMediaItem
seleccionado recientemente (consulte MediaSession ).Acciones especiales de melodía
La lista de programas permite a los usuarios sintonizar una estación específica, pero no les permite realizar solicitudes generales como "sintonizar FM", lo que podría resultar en sintonizar una estación escuchada recientemente en la banda FM.
Para admitir tales acciones, algunos directorios de nivel superior tienen establecido el indicador
FLAG_PLAYABLE
(junto conFLAG_BROWSABLE
para carpetas).Acción Sintoniza a como emitir reproducir radio Cualquier canal de radio startService(ACTION_PLAY_BROADCASTRADIO)
oplayFromMediaId(MediaBrowser. getRoot() )
Reproducir FM Cualquier canal FM Reproducir desde mediaId de banda FM La determinación de qué programa sintonizar depende de la aplicación. Este suele ser el canal sintonizado más recientemente de la lista dada. Para obtener detalles sobre
ACTION_PLAY_BROADCASTRADIO
, consulte las intenciones generales de reproducción .Descubrimiento y conexión de servicios
PackageManager puede encontrar directamente el árbol de transmisión de radio MediaBrowserService. Para hacerlo, llame a
resolveService
con la intenciónACTION_PLAY_BROADCASTRADIO
(consulte Intentos generales de reproducción ) y el indicadorMATCH_SYSTEM_ONLY
. Para encontrar todos los servicios que prestan servicios de radio (puede haber más de uno, por ejemplo, AM/FM y satélite separados), usequeryIntentServices
.El servicio resuelto también controlará la intención de vinculación de
android.media.browse.MediaBrowserService
. Esto se verifica con GTS.Para conectarse al MediaBrowserService seleccionado, cree una instancia de
MediaBrowser
para un componente de servicio determinado yconnect
. Después de establecer la conexión, se puede obtener un identificador de MediaSession a travésgetSessionToken
.La aplicación Radio puede restringir los paquetes de clientes que pueden conectarse en una implementación
onGetRoot
de su servicio. La aplicación debe permitir que las aplicaciones del sistema se conecten sin incluirlas en la lista blanca. Para obtener detalles sobre la inclusión en la lista blanca, consulte Aceptar el paquete y la firma de la aplicación Assistant .Si la aplicación específica de la fuente (por ejemplo, una aplicación de radio) se instala en un dispositivo sin dicha compatibilidad con la fuente, se anunciaría a sí misma como responsable de la intención
ACTION_PLAY_BROADCASTRADIO
, pero su árbol MediaBrowser no contendría etiquetas específicas de la radio. Por lo tanto, un cliente que desee verificar si una fuente determinada está disponible en un dispositivo debe:- Descubra el servicio de radio (llame a
resolveService
paraACTION_PLAY_BROADCASTRADIO
). - Cree
MediaBrowser
para él y luego conéctese a él. - Determine la presencia de
MediaItem
conEXTRA_BCRADIO_FOLDER_TYPE
extra.
Nota: En la mayoría de los casos, el cliente debe escanear todos los árboles de MediaBrowser disponibles para detectar todas las fuentes disponibles para un dispositivo determinado.
Nombres de bandas
La lista de bandas está representada por un conjunto de directorios de nivel superior con una etiqueta de tipo de carpeta establecida en
BCRADIO_FOLDER_TYPE_BAND
. Los títulos de susMediaItem
son cadenas localizadas que representan nombres de bandas. En la mayoría de los casos será lo mismo que la traducción al inglés, pero el cliente no puede depender de esa suposición.Para proporcionar un mecanismo estable para buscar ciertas bandas, se agrega una etiqueta adicional para las carpetas de bandas:
EXTRA_BCRADIO_BAND_NAME_EN
. Este es un nombre no localizado de la banda y solo puede tomar uno de estos valores predefinidos:-
AM
-
FM
-
DAB
-
SXM
Si la banda no está en esta lista, la etiqueta de nombre de la banda no debe configurarse. Sin embargo, si la banda está en la lista, debe tener una etiqueta establecida. La radio HD no tiene bandas separadas enumeradas ya que utiliza el mismo medio subyacente que AM/FM.
Intenciones generales de juego
Cada aplicación dedicada a reproducir una fuente dada (como radio o CD) debe manejar una intención de reproducción general, para comenzar a reproducir algún contenido posiblemente desde un estado inactivo (por ejemplo, después del arranque). Depende de la aplicación cómo seleccionar el contenido para reproducir, pero generalmente es el programa de radio o la pista de CD que se reprodujo recientemente.
Hay una intención separada definida para cada fuente de 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 de datos ópticos como CD/DVD, pero no CD-DA (puede ser un CD de modo mixto) -
android.car.intent.action.PLAY_AUX
: sin especificar qué puerto AUX -
android.car.intent.action.PLAY_BLUETOOTH
-
android.car.intent.action.PLAY_USB
: sin especificar qué dispositivo USB -
android.car.intent.action.PLAY_LOCAL
: almacenamiento multimedia local (flash incorporado)
Se eligieron las intenciones para usarlas en el comando de reproducción general, porque resuelven dos problemas a la vez: el comando de reproducción general en sí mismo y el descubrimiento del servicio. El beneficio adicional de tener tal intención sería la posibilidad de ejecutar una acción tan simple sin abrir la sesión de MediaBrowser.
El descubrimiento de servicios es en realidad el problema más importante resuelto con estos intentos. El procedimiento para el descubrimiento de servicios es fácil e inequívoco de esta manera (ver Descubrimiento y conexión de servicios ).
Para facilitar algunas implementaciones de clientes, existe una forma alternativa de emitir dicho comando de reproducción (que también debe implementar la aplicación de radio): emitir
playFromMediaId
con el rootId del nodo raíz (utilizado como mediaId). Si bien el nodo raíz no está destinado a ser reproducible, su rootId es una cadena arbitraria que se puede convertir en consumible como mediaId. Sin embargo, los clientes no están obligados a comprender este matiz.Selector de programa
Si bien mediaId es suficiente para seleccionar un canal de MediaBrowserService, se vincula a una sesión y no es coherente entre los proveedores. En algunos casos, el cliente puede necesitar un puntero absoluto (como una frecuencia absoluta) para mantenerlo entre sesiones y dispositivos.
En la era de las transmisiones de radio digital, una sola frecuencia no es suficiente para sintonizar una estación específica. Por lo tanto, utilice
ProgramSelector
para sintonizar un canal analógico o digital.ProgramSelector
consta de dos partes:- Identificador principal. Un identificador único y estable para una estación de radio determinada que no cambia pero que puede no ser suficiente para sintonizar esa estación. Por ejemplo, el código PI RDS, que puede traducirse al distintivo de llamada en los EE. UU.
- Identificadores secundarios. Identificadores adicionales útiles para sintonizar esa estación (por ejemplo, frecuencia), posiblemente incluyendo identificadores de otras tecnologías de radio. Por ejemplo, una estación DAB puede tener un respaldo de transmisión analógica.
Para permitir que ProgramSelector encaje en la solución basada en MediaBrowser/MediaSession, defina un esquema de URI para serializarlo. El esquema se define de la siguiente manera:
broadcastradio://program/<primary ID type>/<primary ID>? <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>
En este ejemplo, la parte de los identificadores secundarios (después del signo de interrogación (
?
)) es opcional y se puede eliminar para proporcionar un identificador estable para usar comomediaId
. Por ejemplo:-
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 de autoridad (también conocida como host) del
program
proporciona cierto espacio para la extensión del esquema en el futuro. Las cadenas de tipo de identificador se especifican con precisión como sus nombres en la definición HAL 2.x deIdentifierType
y el formato del valor es un número decimal o hexadecimal (con el prefijo0x
).Todos los identificadores específicos del proveedor están representados por el prefijo
VENDOR_
. Por ejemplo,VENDOR_0
paraVENDOR_START
yVENDOR_1
paraVENDOR_START + 1
. Dichos URI son específicos del hardware de radio en el que se generaron y no se pueden transferir entre dispositivos fabricados por diferentes OEM.Estos URI deben asignarse a cada elemento multimedia en las carpetas de radio de nivel superior. Además, MediaSession debe admitir tanto
playFromMediaId
comoplayFromUri
. Sin embargo, el URI está diseñado principalmente para la extracción de metadatos de radio (como la frecuencia FM) y el almacenamiento persistente. No hay garantía de que el URI esté disponible para todos los elementos multimedia (por ejemplo, cuando el tipo de ID principal aún no es compatible con el marco). Por otro lado, Media ID siempre funciona. No se recomienda que los clientes utilicen URI para seleccionar elementos de la sesión actual de MediaBrowser. En su lugar, usaplayFromMediaId
. Dicho esto, no es opcional para la aplicación de servicio y los URI faltantes se reservan para casos bien justificados.El diseño inicial usaba dos puntos en lugar de la secuencia
://
después de la parte del esquema. Sin embargo, el primero no es compatible conandroid.net.Uri
para referencias URI jerárquicas absolutas.Otros tipos de fuentes
Otras fuentes de audio se pueden manejar de manera similar. Por ejemplo, la entrada auxiliar y el reproductor de CD de audio.
Una sola aplicación puede servir para múltiples tipos de fuentes. En tales casos, se recomienda que cree un MediaBrowserService independiente para cada tipo de fuente. Incluso en una configuración con múltiples fuentes servidas/MediaBrowserServices, se recomienda enfáticamente tener una sola MediaSession dentro de una sola aplicación.
CD de audio
Similar al CD de audio en el sentido de que la aplicación que sirve a dichos discos expondría MediaBrowser con una sola entrada navegable (o más, si el sistema tiene un cambiador de CD), que a su vez contendría todas las pistas de un CD determinado. Si el sistema no conoce las pistas de cada CD (por ejemplo, cuando se insertan todos los discos en un cartucho a la vez y no los lee todos), MediaItem para todo el disco sería simplemente
PLAYABLE
, noBROWSABLE+PLAYABLE
. Si no hay ningún disco en una ranura determinada, el elemento no se podráPLAYABLE
niBROWSABLE
(pero cada ranura debe estar siempre presente en el árbol).Estas entradas se marcarían de manera similar a las carpetas de radiodifusión: contendrían campos adicionales adicionales definidos en la API MediaDescription:
-
EXTRA_CD_TRACK
: para cadaMediaItem
en CD de audio, número de pista basado en 1. -
EXTRA_CD_DISK
: número de disco basado en 1.
Para un sistema habilitado para CD-Text y un disco compatible, el MediaItem de nivel superior tendría un título del disco. De manera similar, los MediaItems para pistas tendrían un título de la pista.
Entrada auxiliar
La aplicación que sirve la entrada auxiliar expone un árbol de MediaBrowser con una sola entrada (o más, cuando existen varios puertos) que representa el puerto de entrada AUX. La MediaSession respectiva toma su mediaId y cambia a esa fuente después de recibir la solicitud
playFromMediaId
.Cada entrada AUX MediaItem tendría un campo adicional
EXTRA_AUX_PORT_NAME
establecido en el nombre no localizado del puerto sin la frase "AUX". Por ejemplo, "AUX 1" se habría configurado en "1", "AUX front" en "front" y "AUX" en una cadena vacía. En las configuraciones regionales que no estén en inglés, la etiqueta de nombre seguirá siendo la misma cadena en inglés. Es poco probable queEXTRA_BCRADIO_BAND_NAME_EN
, los valores estén definidos por el OEM y no estén restringidos a una lista predefinida.Si el hardware puede detectar dispositivos conectados al puerto AUX, el hardware debe marcar el MediaItem como
PLAYABLE
, solo si la entrada está conectada. El hardware aún debe enumerarse (pero noPLAYABLE
) si no se conectó nada a este puerto. Si el hardware no tiene esa capacidad, MediaItem siempre debe establecerse enPLAYABLE
.Campos adicionales
Por lo tanto, se deben definir las siguientes claves adicionales:
-
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"
El cliente debe revisar los MediaItems de nivel superior en busca de elementos que tengan configurado el campo adicional
EXTRA_CD_DISK
oEXTRA_AUX_PORT_NAME
.Ejemplos detallados
Los siguientes ejemplos abordan la estructura de árbol de MediaBrowser para los tipos de origen que forman parte de este diseño.
Broadcast radio MediaBrowserService (maneja
ACTION_PLAY_BROADCASTRADIO
):- Estaciones (navegables)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
- BBC One (jugable)
URI:broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
- ABC 88.1 (jugable)
URI:broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
- ABC 88.1 HD1 (jugable)
URI:broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
- ABC 88.1 HD2 (jugable)
URI:broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
- 90.5 FM (reproducible) – FM sin RDS
URI:broadcastradio://program/AMFM_FREQUENCY/90500
- 620 AM (jugable)
URI:broadcastradio://program/AMFM_FREQUENCY/620
- BBC One (jugable)
URI:broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
- BBC One (jugable)
- Favoritos (navegables, jugables)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
- BBC One (jugable)
URI:broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
- BBC Two (no jugable)
URI:broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
- BBC One (jugable)
- AM (navegable, jugable)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BAND
EXTRA_BCRADIO_BAND_NAME_EN="AM"- 530 AM (jugable)
URI:broadcastradio://program/AMFM_FREQUENCY/530
- 540 AM (jugable)
URI:broadcastradio://program/AMFM_FREQUENCY/540
- 550 AM (jugable)
URI:broadcastradio://program/AMFM_FREQUENCY/550
- 530 AM (jugable)
- FM (navegable, reproducible)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BAND
EXTRA_BCRADIO_BAND_NAME_EN="FM"- 87.7 FM (jugable)
URI:broadcastradio://program/AMFM_FREQUENCY/87700
- 87.9 FM (jugable)
URI:broadcastradio://program/AMFM_FREQUENCY/87900
- 88.1 FM (jugable)
URI:broadcastradio://program/AMFM_FREQUENCY/88100
- 87.7 FM (jugable)
- DAB (jugable)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BAND
EXTRA_BCRADIO_BAND_NAME_EN="DAB"
CD de audio MediaBrowserService (maneja
ACTION_PLAY_AUDIOCD
):- Disco 1 (reproducible)
EXTRA_CD_DISK=1
- Disco 2 (explorable, reproducible)
EXTRA_CD_DISK=2
- Pista 1 (reproducible)
EXTRA_CD_TRACK=1
- Pista 2 (jugable)
EXTRA_CD_TRACK=2
- Pista 1 (reproducible)
- Mi CD de música (explorable, reproducible)
EXTRA_CD_DISK=3
- Todo por mí mismo (jugable)
EXTRA_CD_TRACK=1
- Reise, Reise (jugable)
EXTRA_CD_TRACK=2
- Todo por mí mismo (jugable)
- Espacio vacío 4 (no jugable)
EXTRA_CD_DISK=4
AUX MediaBrowserService (maneja
ACTION_PLAY_AUX
):- AUX frontal (jugable)
EXTRA_AUX_PORT_NAME="front"
- AUX trasero (jugable)
EXTRA_AUX_PORT_NAME="rear"
-