La implementación del control de radio se basa en MediaSession
y MediaBrowse
, que permiten que las apps de Asistente de voz y multimedia controlen la radio. Para obtener más información, consulta Cómo compilar apps de música para vehículos en developer.android.com.
Se proporciona una implementación de árbol de exploración de contenido multimedia en la biblioteca car-broadcastradio-support en packages/apps/Car/libs
. Esta biblioteca también contiene extensiones de ProgramSelector para convertir de URI y a URI. Se recomienda que las implementaciones de radio usen esta biblioteca para compilar el árbol de navegación asociado.
Selector de fuentes multimedia
Para proporcionar una transición fluida entre la radio y otras apps que se muestran en el contenido multimedia, la biblioteca car-media-common contiene clases que se deben integrar en la app de radio. MediaAppSelectorWidget
se puede incluir en el XML de la app de radio (el ícono y el menú desplegable que se usan en las apps de radio y multimedia 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 contenido multimedia a las que se puede cambiar. Si se desea una IU distinta de la proporcionada, puedes crear un widget personalizado para iniciar el AppSelectionFragment
cuando se deba mostrar el selector.
AppSelectionFragment newFragment = AppSelectionFragment.create(widget, packageName, fullScreen); newFragment.show(mActivity.getSupportFragmentManager(), null);
Se proporciona una implementación de ejemplo en la implementación de la app de radio de referencia, que se encuentra en packages/apps/Car/Radio
.
Especificaciones detalladas del control
La interfaz MediaSession
(a través de MediaSession.Callback
) proporciona mecanismos de control para el programa de radio que se está reproduciendo:
onPlay
,onStop
. Activar o desactivar la reproducción de la radio.onPause
. Pausa en directo (si es compatible).onPlayFromMediaId
. Reproducir cualquier contenido de una carpeta de nivel superior Por ejemplo, "Reproduce FM" o "Reproduce radio".onPlayFromUri
. Reproduce una frecuencia específica. Por ejemplo, "Reproduce 88.5 FM".onSkipToNext
,onSkipToPrevious
. Sintonizar una estación siguiente o anterioronSetRating
. Agrega o quita elementos de Favoritos.
MediaBrowser expone un MediaItem ajustable en tres tipos de directorios de nivel superior:
- (Opcional) Programas (estaciones). Por lo general, las radios con sintonizador doble usan este modo 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. Es posible que algunos no estén 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, etcétera). Cada banda tiene un directorio de nivel superior independiente.
Cada elemento de cada una de estas carpetas (AM/FM/Programs) es un MediaItem con un URI que se puede usar con MediaSession para sintonizar. Cada carpeta de nivel superior (AM/FM/Programs) 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, "Reproduce FM", "Reproduce AM" y "Reproduce radio" son consultas de radio no específicas que usan un mediaId para enviar a la app de radio del OEM. Depende de la app de radio determinar qué reproducir desde la solicitud genérica y el mediaId.
MediaSession
Dado que no hay un concepto de pausar una transmisión de emisión, las acciones de Reproducir, Pausar y Detener no siempre se aplican a la radio. En el caso de la radio, la acción Detener está asociada con silenciar la transmisión, mientras que Reproducir está asociada con quitar el silenciamiento.
Algunos sintonizadores de radio (o apps) permiten simular una pausa de transmisión mediante la caché del contenido y, luego, reproducirlo más tarde. En esos casos, usa onPause
.
La reproducción desde acciones de mediaId y URI está diseñada para sintonizar una estación recuperada de la interfaz de MediaBrowser. El mediaId es una cadena arbitraria que proporciona la app de radio para imponer un valor único (para que un ID determinado apunte a un solo elemento) y estable (para que un elemento determinado tenga el mismo ID durante toda la sesión) con el que identificar una estación determinada. El URI tendrá un esquema bien definido. En resumen, es una forma URI de ProgramSelector. Si bien esto preserva el atributo de unicidad, no es necesario que sea estable, aunque puede cambiar cuando la estación se mueve a una frecuencia diferente.
De forma predeterminada, no se usa onPlayFromSearch
. Es responsabilidad del cliente (app complementaria) seleccionar un resultado de la búsqueda del árbol de MediaBrowser. Transferir esa responsabilidad a la app de radio aumentaría la complejidad, requeriría contratos formales sobre cómo deben aparecer las consultas de cadenas y generaría una experiencia del usuario desigual en diferentes plataformas de hardware.
Nota: La app de radio no contiene información adicional que sea útil para buscar el nombre de una estación que no esté expuesta al cliente a través de la interfaz de MediaBrowser.
El salto a la estación siguiente o anterior depende del contexto actual:
- Cuando una app sintoniza una estación de la lista de Favoritos, puede pasar a la siguiente estación de la lista.
- Escuchar una estación de la lista de programas puede hacer que se sintonize la siguiente estación disponible, ordenada según el número de canal.
- Escuchar un canal arbitrario puede hacer que se sintonize el siguiente canal físico, incluso cuando no hay señal de transmisión.
La app de radio controla estas acciones.
Manejo de errores
Las acciones de TransportControls
(Reproducir, Detener y Siguiente) no proporcionan comentarios sobre si la acción se realiza 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 app de radio debe controlar 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 el caso de la sintonización directa),
STATE_SKIPPING_TO_PREVIOUS
o
NEXT
mientras se ejecuta el comando.
El cliente debe observar el
PlaybackState
y verificar que la sesión haya cambiado el programa actual al que se solicitó o ingresó en el estado de error. STATE_CONNECTING
no debe superar los 30 segundos. Sin embargo, la sintonización directa de una frecuencia AM/FM determinada debería ser mucho más rápida.
Cómo agregar y quitar favoritos
MediaSession admite clasificaciones, que se pueden usar para controlar los favoritos. onSetRating
llamado con una calificación de tipo RATING_HEART
agrega o quita la estación sintonizada actualmente a la lista de Favoritos o de ella.
A diferencia de los parámetros de configuración heredados, este modelo supone una lista de Favoritos desordenada y sin límites, en la que cada favorito guardado se asignó a un espacio numérico (por lo general, de 1 a 6).
Como resultado, los sistemas basados en parámetros predeterminados no serían compatibles con la operación de onSetRating
.
La limitación de la API de MediaSession es que solo se puede agregar o quitar la estación a la que se está sintonizando. Por ejemplo, primero se deben seleccionar los elementos para poder quitarlos. Esta es solo una limitación del cliente de MediaBrowser, como una app complementaria. La app de radio no tiene una restricción similar. Esta parte es opcional cuando una app no admite Favoritos.
MediaBrowser
Para expresar qué frecuencias o nombres de canales físicos (cuando la sintonización en un canal arbitrario es adecuada para una tecnología de radio determinada) son válidos para una región determinada, todos los canales válidos (frecuencias) se enumeran 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 1,700 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 disponibles actualmente es plana, ya que no permite esquemas de visualización, como la agrupación por conjunto de transmisión de audio directa (DAB).
Es posible que las entradas de la lista de favoritos no se puedan ajustar. Por ejemplo, si un programa determinado está fuera de rango. La app de radio puede detectar o no si se puede sintonizar la entrada con anticipación. Si es así, es posible que no se marque la entrada como reproducible.
Para identificar las carpetas de nivel superior, se aplica el mismo mecanismo que usa Bluetooth.
Es decir, un paquete de extras del objeto
MediaDescription
contiene un campo específico del sintonizador, al igual que Bluetooth lo hace con
EXTRA_BT_FOLDER_TYPE
.
En el caso de la radio de transmisión, esto lleva a definir los siguientes campos nuevos 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
. Son los programas disponibles actualmente.BCRADIO_FOLDER_TYPE_FAVORITES = 2
. Favoritos.BCRADIO_FOLDER_TYPE_BAND = 3
: Todos los canales físicos de una banda determinada.
No es necesario definir ningún campo de metadatos personalizados específicos de la radio, ya que todos los datos relevantes se ajustan al esquema
MediaBrowser.MediaItem
existente:- Nombre del programa (PS de RDS, nombre del servicio de DAB).
MediaDescription.getTitle
. - Frecuencia de FM. URI de (consulta ProgramSelector) o
MediaDescription.getTitle
(si hay una entrada 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 recuperar la frecuencia de FM para una entrada en el programa actual o la lista de favoritos (ya que el cliente debe operar en IDs de contenido multimedia). Sin embargo, si surge 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 usar el URI para seleccionar elementos dentro de la sesión actual. Para obtener más información, consultaProgramSelector
.Para evitar problemas de rendimiento o relacionados con Binder, el servicio de MediaBrowser debe admitir la paginación:
EXTRA_PAGE
EXTRA_PAGE_SIZE
- Parámetros adicionales para
subscribe()
Nota: De forma predeterminada, la paginación se implementa en la variante
onLoadChildren()
sin control de opciones.Las entradas relacionadas de todos los tipos de listas (canales sin procesar, programas encontrados y favoritos) pueden tener diferentes mediaIds (depende de la app de radio; la biblioteca de compatibilidad los tendrá diferentes). Los URIs (en formato ProgramSelector) difieren entre los canales sin procesar y los programas que se encuentran en la mayoría de los casos (excepto para FM sin RDS), pero son en su mayoría los mismos entre los programas encontrados y los favoritos (excepto, por ejemplo, cuando se actualizó la AF).
Tener diferentes mediaIds para entradas de diferentes tipos de listas permite realizar diferentes acciones en ellas. Puedes recorrer la lista de Favoritos o la lista de Todos los programas en
onSkipToNext
, según la carpeta deMediaItem
seleccionada recientemente (consulta MediaSession).Acciones de sintonización especial
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 provocar que se sintonizara una estación que se escuchó recientemente en la banda FM.
Para admitir estas acciones, algunos directorios de nivel superior tienen establecida la marca
FLAG_PLAYABLE
(junto conFLAG_BROWSABLE
para las carpetas).Acción Sintoniza Cómo emitir Reproducir la radio Cualquier canal de radio startService(ACTION_PLAY_BROADCASTRADIO)
O,
playFromMediaId(MediaBrowser.getRoot())
Reproducir FM Cualquier canal de FM Reproduce desde el mediaId
de la banda FM.La app determina qué programa sintonizar. Por lo general, es el canal que se sintonizó más recientemente de la lista determinada. Para obtener detalles sobre
ACTION_PLAY_BROADCASTRADIO
, consulta Intents de reproducción generales.Descubrimiento y conexión de servicios
PackageManager
puede encontrar directamente el árbol de radio de transmisión que entrega MediaBrowserService. Para ello, llama aresolveService
con el intentACTION_PLAY_BROADCASTRADIO
(consulta Intents de reproducción generales) y la marcaMATCH_SYSTEM_ONLY
. Para encontrar todos los servicios que publican radio (puede haber más de uno, por ejemplo, AM/FM y satélite separados), usaqueryIntentServices
.El servicio resuelto también controla el intent de vinculación
android.media.browse.MediaBrowserService
. Esto se verifica con GTS.Para conectarte al MediaBrowserService seleccionado, crea 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és degetSessionToken
.La app de Radio puede restringir los paquetes de clientes que se pueden conectar en una implementación de
onGetRoot
de su servicio. La app debe permitir que las apps del sistema se conecten sin incluirlas en la lista de entidades permitidas. Para obtener más información sobre las listas de entidades permitidas, consulta Cómo aceptar el paquete y la firma de la app del Asistente.Si la app específica de la fuente (por ejemplo, una app de radio) está instalada en un dispositivo sin compatibilidad con esa fuente, se anunciará como la que controla el intent
ACTION_PLAY_BROADCASTRADIO
, pero su árbol de MediaBrowser no contendrá etiquetas específicas de radio. Por lo tanto, un cliente que desee verificar si una fuente determinada está disponible en un dispositivo debe hacer lo siguiente:- Descubre el servicio de radio (llama a
resolveService
paraACTION_PLAY_BROADCASTRADIO
). - Crea
MediaBrowser
y, luego, conéctate a él. - Determina la presencia de
MediaItem
conEXTRA_BCRADIO_FOLDER_TYPE
adicional.
Nota: En la mayoría de los casos, el cliente debe analizar todos los árboles de MediaBrowser disponibles para detectar todas las fuentes disponibles para un dispositivo determinado.
Nombres de las 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á igual 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 tener uno de estos valores predefinidos:AM
FM
DAB
Si la banda no está en esta lista, no se debe establecer la etiqueta de nombre de la banda. Sin embargo, si la banda está en la lista, debe tener una etiqueta configurada. La radio HD no enumera bandas separadas, ya que usa el mismo medio subyacente que la AM/FM.
Intents de reproducción general
Cada app dedicada a reproducir una fuente determinada (como una radio o un CD) debe controlar un intent de reproducción general para comenzar a reproducir contenido, posiblemente desde un estado inactivo (por ejemplo, después del inicio). Depende de la app cómo seleccionar el contenido que se reproducirá, pero, por lo general, es el programa de radio o la pista de CD que se reprodujo recientemente.Hay un intent independiente definido para cada fuente de audio:
android.car.intent.action.PLAY_BROADCASTRADIO
android.car.intent.action.PLAY_AUDIOCD
: CD-DA o CD-Textandroid.car.intent.action.PLAY_DATADISC
: Disco de datos óptico, como CD/DVD, pero no CD-DA (puede ser un CD de modo mixto)android.car.intent.action.PLAY_AUX
: Sin especificar qué puerto AUXandroid.car.intent.action.PLAY_BLUETOOTH
android.car.intent.action.PLAY_USB
: Sin especificar qué dispositivo USBandroid.car.intent.action.PLAY_LOCAL
: Almacenamiento de contenido multimedia local (memoria flash integrada)
Se eligieron los intents para usarlos en el comando de reproducción general, ya que resuelven dos problemas a la vez: el comando de reproducción general en sí y el descubrimiento de servicios. El beneficio adicional de tener ese intent 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 que se resuelve con estos intents. De esta manera, el procedimiento para el descubrimiento de servicios es fácil y unívoco (consulta Descubrimiento y conexión de servicios).
Para facilitar algunas implementaciones de clientes, existe una forma alternativa de emitir ese comando de reproducción (que también debe implementar la app de radio): emitir
playFromMediaId
con el rootId del nodo raíz (que se usa como mediaId). Si bien el nodo raíz no está diseñado para reproducirse, su rootId es una cadena arbitraria que se puede consumir como mediaId. Sin embargo, no se requiere que los clientes comprendan este matiz.ProgramSelector
Si bien
mediaId
es suficiente para seleccionar un canal deMediaBrowserService
, se vincula a una sesión y no es coherente entre los proveedores. En algunos casos, es posible que el cliente necesite un puntero absoluto (como una frecuencia absoluta) para mantenerlo entre sesiones y dispositivos.En la era de las transmisiones de radio digital, una frecuencia sin más no es suficiente para sintonizar una estación específica. Por lo tanto, usa
ProgramSelector
para sintonizar un canal analógico o digital.ProgramSelector
consta de dos partes:- Es el identificador principal. Es un identificador único y estable para una estación de radio determinada que no cambia, pero que puede no ser suficiente para sintonizarla. Por ejemplo, el código PI de RDS, que se puede traducir al indicativo de estación en EE.UU.
- Identificadores secundarios. Son identificadores adicionales útiles para sintonizar esa estación (por ejemplo, la frecuencia), lo que puede incluir identificadores de otras tecnologías de radio. Por ejemplo, una estación DAB puede tener un resguardo de transmisión analógica.
Para permitir que
ProgramSelector
se ajuste a la solución basada enMediaBrowser
oMediaSession
, define 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 identificadores secundarios (después del signo de interrogación (
?
)) es opcional y se puede quitar 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) de
program
proporciona 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 deIdentifierType
de HAL 2.x, y el formato de valor es un número decimal o hexadecimal (con el prefijo0x
).Todos los identificadores específicos del proveedor se representan con el prefijo
VENDOR_
. Por ejemplo,VENDOR_0
paraVENDOR_START
yVENDOR_1
paraVENDOR_START
más 1. Estos URI son específicos del hardware de radio en el que se generaron y no se pueden transferir entre dispositivos fabricados por diferentes OEMs.Estos URIs se deben asignar a cada MediaItem en las carpetas de radio de nivel superior. Además, MediaSession debe admitir
playFromMediaId
yplayFromUri
. Sin embargo, el URI está destinado principalmente a 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 framework aún no admite el tipo de ID principal). Por otro lado, el ID de contenido multimedia siempre funciona. No se recomienda que los clientes usen URI para seleccionar elementos de la sesión actual de MediaBrowser. En su lugar, usaplayFromMediaId
. Dicho esto, no es opcional para la app de publicación, y los URIs faltantes se reservan para casos bien justificados.El diseño inicial usaba un solo dos puntos en lugar de la secuencia
://
después de la parte del esquema. Sin embargo,android.net.Uri
no admite el primero para referencias de URI jerárquicas absolutas.Otros tipos de fuentes
Se puede controlar de manera similar otras fuentes de audio. Por ejemplo, la entrada auxiliar y el reproductor de CD de audio.
Una sola app puede publicar varios tipos de fuentes. En esos casos, te recomendamos que crees un MediaBrowserService independiente para cada tipo de fuente. Incluso en una configuración con varias fuentes o MediaBrowserServices, se recomienda tener una sola MediaSession dentro de una sola app.
CD de audio
Es similar al audio CD en que la app que entrega esos 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 tiene información sobre las pistas de cada CD (por ejemplo, cuando todos los discos se insertan en un cartucho a la vez y no los lee todos), MediaItem para todo el disco sería solo
PLAYABLE
, noBROWSABLE
másPLAYABLE
. Si no hay un disco en una ranura determinada, el elemento no seráPLAYABLE
niBROWSABLE
(pero cada ranura siempre debe estar presente en el árbol).Estas entradas se marcarían de manera similar a las carpetas de radio de transmisión. Contendrían campos adicionales definidos en la API de MediaDescription:
EXTRA_CD_TRACK
: Para cadaMediaItem
en el CD de audio, es el número de pista basado en 1.EXTRA_CD_DISK
: Es el número de disco basado en 1.
Para un sistema compatible con CD-Text y un disco compatible, el MediaItem de nivel superior tendría el título del disco. Del mismo modo, los MediaItems de las pistas tendrían un título de la pista.
Entrada auxiliar
La app que entrega la entrada auxiliar expone un árbol de MediaBrowser con una sola entrada (o más, cuando existen varios puertos) que representa el puerto AUX IN. La MediaSession respectiva toma su mediaId y cambia a esa fuente después de recibir la solicitud
playFromMediaId
.Cada entrada de MediaItem AUX tendría un campo extra
EXTRA_AUX_PORT_NAME
establecido en el nombre no localizado del puerto sin la frase “AUX”. Por ejemplo, “AUX 1” se establecería en “1”, “AUX front” en “front” y “AUX” en una cadena vacía. En las configuraciones regionales que no son en inglés, la etiqueta de nombre conservaría la misma cadena en inglés. Es poco probable que, como enEXTRA_BCRADIO_BAND_NAME_EN
, los valores sean definidos por el OEM y no estén restringidos a una lista predefinida.Si el hardware puede detectar dispositivos conectados al puerto AUX, debe marcar MediaItem como
PLAYABLE
, solo si la entrada está conectada. El hardware debería 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
Define los siguientes campos:
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 para los elementos que tienen el campo adicional
EXTRA_CD_DISK
oEXTRA_AUX_PORT_NAME
configurado.Ejemplos detallados
En los siguientes ejemplos, se aborda la estructura de árbol de MediaBrowser para los tipos de fuentes que forman parte de este diseño.
MediaBrowserService de radio de transmisión (controla
ACTION_PLAY_BROADCASTRADIO
):- Estaciones (navegables)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
- URI de BBC One (jugable):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
- URI de ABC 88.1 (jugable):
broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
- URI de ABC 88.1 HD1 (jugable):
broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
- URI de ABC 88.1 HD2 (jugable):
broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
- 90.5 FM (reproducible) - FM sin RDSURI:
broadcastradio://program/AMFM_FREQUENCY/90500
- URI de 620 AM (reproducible):
broadcastradio://program/AMFM_FREQUENCY/620
- URI de BBC One (reproducible):
broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
- URI de BBC One (jugable):
- Favoritos (se pueden explorar y reproducir)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
- URI de BBC One (reproducible):
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
- URI de BBC Two (no se puede reproducir):
broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
- URI de BBC One (reproducible):
- AM (se puede explorar y reproducir):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
- URI de 5:30 a.m. (jugable):
broadcastradio://program/AMFM_FREQUENCY/530
- URI de 540 a.m. (jugable):
broadcastradio://program/AMFM_FREQUENCY/540
- URI de 550 a.m. (jugable):
broadcastradio://program/AMFM_FREQUENCY/550
- URI de 5:30 a.m. (jugable):
- FM (se puede explorar y reproducir):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
- URI de FM 87.7 (reproducible):
broadcastradio://program/AMFM_FREQUENCY/87700
- URI de FM 87.9 (reproducible):
broadcastradio://program/AMFM_FREQUENCY/87900
- URI de 88.1 FM (reproducible):
broadcastradio://program/AMFM_FREQUENCY/88100
- URI de FM 87.7 (reproducible):
- DAB (reproducible):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"
MediaBrowserService de CD de audio (controla
ACTION_PLAY_AUDIOCD
):- Disco 1 (reproducible)
EXTRA_CD_DISK=1
- Disco 2 (se puede explorar y reproducir)
EXTRA_CD_DISK=2
- Pista 1 (reproducible)
EXTRA_CD_TRACK=1
- Segmento 2 (reproducible)
EXTRA_CD_TRACK=2
- Pista 1 (reproducible)
- Mi CD de música (se puede explorar y reproducir)
EXTRA_CD_DISK=3
- Solo (jugable)
EXTRA_CD_TRACK=1
- Reise, Reise (jugable)
EXTRA_CD_TRACK=2
- Solo (jugable)
- Ranura 4 vacía (no se puede reproducir)
EXTRA_CD_DISK=4
AUX MediaBrowserService (controla
ACTION_PLAY_AUX
):- AUX frontal (reproducible)
EXTRA_AUX_PORT_NAME="front"
- AUX trasero (reproducible)
EXTRA_AUX_PORT_NAME="rear"