El siguiente diagrama ilustra los componentes que interactúan con Media.
Figura 1. Componentes del sistema
Los elementos de esta figura se describen a continuación:
Componente | Descripción |
---|---|
Pantalla de inicio | Representa otras superficies en la interfaz de usuario del automóvil que muestran y controlan los medios que se están reproduciendo actualmente. En AOSP, esta es la pantalla principal que se muestra cuando se inicia el sistema. Desde esta pantalla, los usuarios pueden ver los detalles del elemento multimedia que se está reproduciendo y ejecutar un conjunto limitado de acciones estándar y personalizadas (por ejemplo, Reproducir y Pausa). |
Interfaz de usuario del sistema | Proporciona una funcionalidad que incluye opciones de navegación de la interfaz de usuario global, como navegar a Medios. |
Asistentes | Android proporciona mecanismos para que diferentes aplicaciones de asistente de voz interactúen con el sistema. Estas aplicaciones pueden interactuar con fuentes de medios en segundo plano (por ejemplo, reproducir una canción como resultado de un comando de voz) o navegar a Medios en primer plano (por ejemplo, cuando se le indica a una aplicación de asistente de voz que muestre la interfaz de usuario de un fuente de medios específica). |
Lanzador de aplicaciones | Todas las aplicaciones de Android se inician en el Iniciador de aplicaciones, incluidas las fuentes multimedia. Los medios pueden presentar su propio selector de fuente de medios, complementando o reemplazando el Iniciador de aplicaciones como el lugar de inicio para los medios. |
Tienda de juegos de Google | Cuando se usa GAS, aquí es donde los usuarios ubican e instalan nuevas aplicaciones en un dispositivo Android. Para los medios, una vez que se instalan las aplicaciones, los usuarios son dirigidos a los medios para completar el proceso de inicio de sesión o para comenzar a interactuar con la aplicación. |
Administrador de sesión de medios | Servicio del sistema Android que rastrea y controla las sesiones de medios de todas las fuentes de medios. Proporciona mecanismos para detectar cuándo una fuente de medios se convierte en la fuente de medios de primer plano . Los medios y todas las demás aplicaciones que muestran la fuente de medios que se está reproduciendo actualmente (por ejemplo, la pantalla de inicio), usan el Administrador de sesión de medios para detectar estos eventos y actualizar la interfaz de usuario en consecuencia. Las fuentes de medios interactúan con Media Session Manager por medio de Media Session API . |
Radio | Aplicación especializada para interactuar con el hardware de radio. La radio busca estaciones de radio, selecciona rápidamente las estaciones identificadas recientemente y cambia entre bandas de radio. Los componentes de la interfaz de usuario compartidos por Radio y Media permiten al usuario cambiar entre las dos experiencias. |
Motor de distracción del conductor | Servicio del sistema Android utilizado para imponer restricciones de UX basadas en el estado de conducción del automóvil. Para el inicio de sesión de fuentes de medios y la configuración UX (donde la pantalla es controlada directamente por las fuentes de medios), este servicio garantiza que no se muestre contenido inseguro cuando el automóvil está en estado de conducción. Los OEM pueden personalizar la definición de estos estados y cómo reacciona el sistema en estas situaciones (por ejemplo, mostrando una superposición de pantalla de bloqueo). |
Flujos de usuario
Lanzamiento de la aplicación de medios
El proceso mediante el cual se inicia Media aparece a continuación.
Figura 2. Inicio de la aplicación multimedia
Los medios deben iniciarse utilizando el siguiente CAR_INTENT_ACTION_MEDIA_TEMPLATE implícito . Este intent puede tener la siguiente información como extras :
android.car.intent.extra.MEDIA_COMPONENT
( opcional ). Cadena extra para representar el nombre del componente aplanado de un MediaBrowserService en la aplicación de medios a la que se conectará el medio. Si no se proporciona, Medios muestra la aplicación de medios actualmente seleccionada. Esta intención se utiliza desde los siguientes puntos de entrada:IU del sistema. Se utiliza para volver a la experiencia multimedia o para empezar a utilizarla por primera vez. En este caso, el Intent anterior se usaría sin ningún extra para hacer que Media muestre la aplicación de medios actualmente seleccionada.
Pantalla de inicio, asistentes y centro de notificaciones. Los usuarios pueden navegar a Medios para mostrar la aplicación de medios actualmente seleccionada. En todos los casos se activa el Intent implícito sin extras.
Iniciador de aplicaciones. Cuando los usuarios seleccionan una aplicación de medios desde el Iniciador de aplicaciones, la intención anterior incluye el elemento adicional CAR_EXTRA_MEDIA_COMPONENT , que contiene la aplicación de medios seleccionada. Media la designa como la aplicación recién seleccionada y se conecta a ella. Para obtener más información, consulte la sección a continuación, Integración del Lanzador de aplicaciones con los medios.
Lanzador de aplicaciones para la integración de medios
Las aplicaciones multimedia no pueden proporcionar ninguna actividad anotada con la categoría android.intent.category.LAUNCHER
. Como resultado, el Iniciador de aplicaciones (o su equivalente) debe implementar una lógica especial para abordar la integración de la fuente de medios:
El Iniciador de aplicaciones debe escanear el sistema en busca de paquetes que implementen
MediaBrowserService.SERVICE_INTERFACE
. Para estos paquetes, App Launcher obtiene el ícono de servicio similar al que se usa para obtener otras actividades.Luego, el Iniciador de aplicaciones combina estos paquetes con los que implementan las actividades de
android.intent.category.LAUNCHER
. Si una aplicación proporciona una implementación de MediaBrowserService y una actividad de iniciador, el servicio tiene prioridad.Al momento de escribir este artículo, ninguna aplicación de fuente de medios puede proporcionar una actividad de iniciador.
- Se puede encontrar un ejemplo de esta lógica en el código AOSP en
AppLauncherUtils#getAllLauncherApps() .
Flujo de inicio de sesión y opciones de configuración
Las aplicaciones multimedia pueden incluir una actividad de configuración optimizada para vehículos. Dicha actividad se puede utilizar para implementar flujos de usuarios no abordados por las API de medios de Android, por ejemplo:
- Iniciar sesión
- Desconectar
- Cambio de cuenta
- Pantalla en la que el usuario está conectado actualmente (si corresponde)
- Configuración del servicio
Figura 3. Flujo de inicio de sesión
Esta actividad de configuración es declarada por la aplicación de medios con el siguiente filtro de intenciones.
<activity android:name=".AppSettingsActivity" android:exported="true android:theme="@style/SettingsActivity" android:label="@string/app_settings_activity_title"> <intent-filter> <action android:name="android.intent.action.APPLICATION_PREFERENCES"/> </intent-filter> </activity>
Los medios deben implementar la siguiente lógica:
Verifique que la aplicación de medios actualmente seleccionada incluya una actividad con el filtro de intención dado.
Si es así, permita que el usuario navegue hasta la actividad.
Si las Restricciones de UX del automóvil están vigentes (por ejemplo, el automóvil se está moviendo), esta posibilidad debe desactivarse ya que la Actividad de configuración no es una IU optimizada para el conductor.
Manejo de errores e inicio de sesión requerido
Los medios interactúan con las aplicaciones de medios a través de la API de sesión de medios de Android. Como parte de esta API, Media recibe un objeto PlaybackState , que comunica el estado actual de la aplicación multimedia.
El proceso de inicio de sesión comienza cuando la aplicación multimedia cambia PlaybackState a STATE_ERROR , incluido un código de error específico (consulte los detalles a continuación). Cuando esto sucede, Media muestra la descripción del error y la posibilidad de navegar a una actividad de inicio de sesión implementada por la aplicación de medios.
Las aplicaciones pueden utilizar este mismo flujo para señalar otras situaciones de error (por ejemplo, un error de conectividad del servidor).
Figura 4. Manejo de errores
Como parte del manejo normal de errores de PlaybackState, los medios deben verificar la siguiente entrada.
Código de error de
PlaybackState
igual aPlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED
. Esto indicará que la aplicación de medios requiere iniciar sesión para continuar con la operación. Se pueden recibir otros códigos de error, que indicarían otro tipo de situaciones de error.El mensaje de error de
PlaybackState
(establecido por las aplicaciones de medios mediante el métodoPlaybackStateCompat.Builder#setErrorMessage
) contendrá una explicación legible por humanos (p. ej., "No ha iniciado sesión"). Este mensaje debe mostrarse al usuario y debe estar optimizado para la distracción de conducción (DO). Para obtener más información, consulte Restricciones de manejo de UX.Opcionalmente,
PlaybackState
puede incluir los siguientes extras (establecidos por aplicaciones multimedia con el método PlaybackStateCompat.Builder#setExtras ) con las siguientes claves.android.media.extras.ERROR_RESOLUTION_ACTION_LABEL
. Establézcalo en una cadena que contenga el mensaje legible por humanos que se mostrará en el botón tocado por el usuario para iniciar el flujo de inicio de sesión.android.media.extras.ERROR_RESOLUTION_ACTION_INTENT
. Configurado con un PendingIntent que se activará cuando el usuario haga clic en el botón mencionado anteriormente. EstePendingIntent
apunta a una actividad de inicio de sesión personalizada implementada por la misma aplicación multimedia.
El estado de
PlaybackState
es igual a STATE_ERROR . Esto indica que no es posible ninguna otra operación hasta que se complete el inicio de sesión.