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 unMediaBrowserServiceen 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 deMediaBrowserServicey 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
PlaybackStateigual aPlaybackStateCompat#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étodoPlaybackStateCompat.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,
PlaybackStatepuede incluir los siguientes elementos adicionales (establecidos por las apps de medios con el métodoPlaybackStateCompat.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 unPendingIntentpara que se active cuando el usuario haga clic en el botón mencionado anteriormente. EstePendingIntentapunta a una actividad de acceso personalizada implementada por la misma app de medios.
-
-
El estado
PlaybackStatees igual aSTATE_ERROR. Esto indica que no es posible realizar ninguna otra operación hasta que se complete el acceso.