Componentes del sistema y flujos de usuarios

En la siguiente tabla, se describen los componentes que interactúan con Media:

Componente Descripción
Pantalla principal Representa otras plataformas en la IU del auto que muestran y controlan el contenido multimedia que se está reproduciendo. En AOSP, esta es la pantalla principal que se muestra cuando se inicia el sistema. En esta pantalla, los usuarios pueden ver detalles del elemento multimedia que se está reproduciendo y ejecutar un conjunto limitado de acciones estándares y personalizadas (por ejemplo, reproducir y pausar).
IU del sistema Proporciona una funcionalidad que incluye opciones de navegación de la IU global, como la navegación a Media.
Asistentes Android proporciona mecanismos para que diferentes apps de asistentes de voz interactúen con el sistema. Estas apps pueden interactuar con las fuentes de contenido multimedia en segundo plano (por ejemplo, reproducir una canción como resultado de un comando por voz) o navegar al contenido multimedia en primer plano (por ejemplo, cuando se le indica a una app de asistente por voz que muestre la IU de una fuente de contenido multimedia específica).
Selector de aplicaciones Todas las apps para Android se inician en el Selector de aplicaciones, incluidas las fuentes de contenido multimedia. El contenido multimedia puede presentar su propio selector de fuentes de contenido multimedia, que complementa o reemplaza al Selector de aplicaciones como punto de partida para el contenido multimedia.
Google Play Store Cuando se usa GAS, aquí es donde los usuarios encuentran e instalan apps nuevas en un dispositivo Android. En el caso de contenido multimedia, una vez que se instalan las apps, se dirige a los usuarios a la sección Multimedia para completar el proceso de acceso o comenzar a interactuar con la app.
Administrador de sesiones multimedia Es un servicio del sistema Android que hace un seguimiento de las sesiones multimedia y las controla desde todas las fuentes multimedia. Proporciona mecanismos para detectar cuándo una fuente de medios se convierte en la fuente de medios en primer plano. Los medios y todas las demás apps que muestran la fuente de medios que se está reproduciendo actualmente (por ejemplo, la pantalla principal) usan Media Session Manager para detectar estos eventos y actualizar la IU según corresponda. Las fuentes de medios interactúan con Media Session Manager a través de la API de Media Session.
Radio App especializada para interactuar con el hardware de la radio. La radio busca estaciones de radio, selecciona rápidamente las estaciones identificadas recientemente y cambia entre las bandas de radio. Los componentes de la IU que comparten Radio y Media permiten al usuario cambiar entre las dos experiencias.
Motor de distracción del conductor Servicio del sistema Android que se usa para imponer restricciones de UX según el estado de conducción del auto. En el caso de la UX de configuración y acceso de fuentes de contenido multimedia (en la que las fuentes de contenido multimedia controlan la pantalla directamente), este servicio garantiza que no se muestre contenido no seguro cuando el automóvil esté en estado de conducción. Los OEM pueden personalizar la definición de estos estados y la forma en que el sistema reacciona en estas situaciones (por ejemplo, mostrando una superposición de bloqueo de pantalla).

Flujos de usuarios

Inicio de la app multimedia

Los medios deben iniciarse con 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). Es un extra de cadena para representar el nombre del componente aplanado de un MediaBrowserService en la app de música a la que se conectará el elemento multimedia. Si no se proporciona, Media muestra la app de contenido multimedia seleccionada actualmente. Este intent se usa desde los siguientes puntos de entrada:

    • IU del sistema: Se usa para volver a la experiencia de Media o para comenzar a usarla por primera vez. En este caso, el Intent anterior se usaría sin ningún extra para que Media muestre la app de medios seleccionada actualmente.

    • Pantalla principal, asistentes y Centro de notificaciones. Los usuarios pueden navegar a Multimedia para mostrar la app de contenido multimedia seleccionada actualmente. En todos los casos, se activa el Intent implícito sin extras.

    • Selector de aplicaciones. Cuando los usuarios seleccionan una app de medios en el Selector de apps, el intent anterior incluye el extra CAR_EXTRA_MEDIA_COMPONENT, que contiene la app de medios seleccionada. Media designa esta app como la app seleccionada recientemente y se conecta a ella. Para obtener más información, consulta la sección Integración del Selector de aplicaciones en Multimedia a continuación.

Integración del Selector de aplicaciones en Multimedia

Las apps de música no pueden proporcionar ninguna actividad anotada con la categoría android.intent.category.LAUNCHER. Como resultado, el Selector de aplicaciones (o su equivalente) debe implementar una lógica especial para abordar la integración de fuentes de medios:

  • El Selector de aplicaciones debe analizar el sistema en busca de paquetes que implementen MediaBrowserService.SERVICE_INTERFACE. En el caso de estos paquetes, el Selector de aplicaciones recupera el ícono del servicio de manera similar a la que se usa para recuperar otras actividades.

  • Luego, el Selector de aplicaciones combina estos paquetes con los que implementan actividades de android.intent.category.LAUNCHER. Si una app proporciona una implementación de MediaBrowserService y una actividad de selector, el servicio tiene prioridad.

    Al momento de escribir este documento, ninguna app de fuente de medios puede proporcionar una actividad de selector.

  • Puedes encontrar un ejemplo de esta lógica en el código de AOSP en AppLauncherUtils#getAllLauncherApps().

Flujo de acceso y opciones de configuración

Las apps de música pueden incluir una actividad de configuración optimizada para vehículos. Esta actividad se puede usar para implementar flujos de usuarios que no se abordan con las APIs de Android Media, por ejemplo:

  • Acceso
  • Cierre de sesión
  • Cambio de cuenta
  • Pantalla en la que el usuario accedió actualmente (si corresponde)
  • Configuración del servicio

La app de medios declara esta actividad de configuración con el siguiente filtro de intents:

<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:

  • Verifica que la app de contenido multimedia seleccionada actualmente incluya una actividad con el filtro de intents determinado.

  • Si es así, permite que el usuario navegue a la actividad.

  • Si las restricciones de la UX del automóvil están vigentes (por ejemplo, el automóvil está en movimiento), esta opción debe inhabilitarse, ya que la actividad de configuración no es una IU optimizada para el conductor.

Manejo de errores y acceso obligatorio

El contenido multimedia interactúa con las apps de contenido multimedia a través de la API de Media Session de Android. Como parte de esta API, Media recibe un objeto PlaybackState, que comunica el estado actual de la app de contenido multimedia.

El proceso de acceso comienza cuando la app de medios cambia PlaybackState a STATE_ERROR, lo que incluye un código de error específico (consulta 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 acceso implementada por la app de contenido multimedia.

Las apps pueden usar este mismo flujo para indicar otras situaciones de error (por ejemplo, un error de conectividad del servidor).

Como parte del control de errores normal de PlaybackState, Media debe verificar la siguiente entrada.

  • Código de error PlaybackState igual a PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED. Esto indica que la app de medios requiere acceso para seguir 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 las apps de medios con el método PlaybackStateCompat.Builder#setErrorMessage) contiene una explicación legible por humanos (por ejemplo, "No accediste"). Este mensaje debe mostrarse al usuario y debe estar optimizado para evitar distracciones al conducir (DO).

  • De manera opcional, PlaybackState puede incluir los siguientes elementos adicionales (establecidos por las apps de medios con el método PlaybackStateCompat.Builder#setExtras) con las siguientes claves.

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL: Se establece en una cadena que contiene el mensaje legible para el usuario que se mostrará en el botón que presione el usuario para iniciar el flujo de acceso.

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT. Se configura con un PendingIntent para que se active cuando el usuario haga clic en el botón mencionado anteriormente. Este PendingIntent apunta a una actividad de acceso personalizada implementada por la misma app de medios.

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