Componentes del sistema y flujos de usuarios.

El siguiente diagrama ilustra los componentes que interactúan con los medios:

Componentes del sistema

Figura 1. Componentes del sistema

Los elementos de esta figura se describen en la tabla:

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 reproducen actualmente. En AOSP, esta es la pantalla principal que se muestra cuando se inicia el sistema. Desde esta pantalla, los usuarios pueden ver 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 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 multimedia 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 punto de partida para los medios.
Tienda Google Play Cuando se utiliza GAS, aquí es donde los usuarios localizan e instalan nuevas aplicaciones en un dispositivo Android. Para los medios, una vez instaladas las aplicaciones, los usuarios son dirigidos a los medios para completar el proceso de inicio de sesión o comenzar a interactuar con la aplicación.
Gerente de sesión de medios Servicio del sistema Android que rastrea y controla las sesiones multimedia de todas las fuentes multimedia. 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 Media Session Manager para detectar estos eventos y actualizar la interfaz de usuario en consecuencia. Las fuentes de medios interactúan con Media Session Manager mediante la API de sesión de medios .
Radio Aplicación especializada para interactuar con el hardware de radio. Radio busca estaciones de radio, selecciona rápidamente 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 El servicio del sistema Android solía imponer restricciones de UX según 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 usuarios

Lanzamiento de la aplicación multimedia

El proceso que inicia Media aparece a continuación.

Lanzamiento de la aplicación multimedia

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 MediaBrowserService en la aplicación multimedia a la que se va a conectar el medio. Si no se proporciona, Medios muestra la aplicación multimedia actualmente seleccionada. Esta intención se utiliza desde los siguientes puntos de entrada:

    • Interfaz de usuario del sistema. Se utiliza para volver a la experiencia Media 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 multimedia actualmente seleccionada.

    • Pantalla de inicio, asistentes y centro de notificaciones. Los usuarios pueden navegar a Medios para mostrar la aplicación multimedia actualmente seleccionada. En todos los casos, se activa el Intent implícito sin extras.

    • Lanzador de aplicaciones. Cuando los usuarios seleccionan una aplicación multimedia desde el Iniciador de aplicaciones, la intención anterior incluye el extra CAR_EXTRA_MEDIA_COMPONENT , que contiene la aplicación multimedia 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 siguiente, Integración del iniciador de aplicaciones con los medios.

Lanzador de aplicaciones para 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 fuentes de medios:

  • El iniciador de aplicaciones debe escanear el sistema en busca de paquetes que implementen MediaBrowserService.SERVICE_INTERFACE . Para estos paquetes, el Iniciador de aplicaciones busca el ícono de servicio similar al que se usa para buscar otras actividades.

  • Luego, App Launcher combina estos paquetes con aquellos que implementan actividades android.intent.category.LAUNCHER . Si una aplicación proporciona una implementación MediaBrowserService y una actividad de inicio, el servicio tiene prioridad.

    Al momento de escribir este artículo, ninguna aplicación de fuente de medios puede proporcionar una actividad de inicio.

  • 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 el vehículo. Esta actividad se puede utilizar para implementar flujos de usuarios no abordados por las API de Android Media, por ejemplo:

  • Iniciar sesión
  • Desconectar
  • Cambio de cuenta
  • Pantalla en la que el usuario ha iniciado sesión actualmente (si corresponde)
  • Configuración del servicio

Flujo de inicio de sesión

Figura 3. Flujo de inicio de sesión

La aplicación multimedia declara esta actividad de Configuración con el siguiente filtro de intención:

<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 multimedia 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 está en movimiento), 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 multimedia 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 una opción para navegar a una actividad de inicio de sesión implementada por la aplicación multimedia.

Las aplicaciones pueden utilizar este mismo flujo para señalar otras situaciones de error (por ejemplo, un error de conectividad del servidor).

Manejo de errores

Figura 4. Manejo de errores

Como parte del manejo normal de errores PlaybackState , los medios deben verificar la siguiente entrada.

  • Código de error PlaybackState igual a PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED . Esto indica que la aplicación multimedia requiere iniciar sesión para continuar funcionando. Se pueden recibir otros códigos de error, que indicarían otros tipos de situaciones de error.

  • El mensaje de error PlaybackState (establecido por aplicaciones multimedia mediante el método PlaybackStateCompat.Builder#setErrorMessage ) contiene una explicación legible por humanos (por ejemplo, "No has iniciado sesión"). Este mensaje debe mostrarse al usuario y debe estar optimizado para distraerse al conducir (DO).

  • Opcionalmente, PlaybackState puede incluir los siguientes extras (configurados por aplicaciones multimedia con el método PlaybackStateCompat.Builder#setExtras ) con las siguientes claves.

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL . Establezca 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 . Establecido con un PendingIntent que se activará cuando el usuario haga clic en el botón mencionado anteriormente. Este PendingIntent apunta a una actividad de inicio de sesión personalizada implementada por la misma aplicación multimedia.

  • El estado PlaybackState es igual a STATE_ERROR . Esto indica que no es posible realizar ninguna otra operación hasta que se complete el inicio de sesión.