En el siguiente diagrama, se ilustran los componentes que interactúan con Media:
Figura 1: Componentes del sistema
Los elementos de esta figura se describen en la tabla:
Componente | Descripción |
---|---|
Pantalla principal | Representa otras plataformas de la IU del automóvil 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. Desde esta pantalla, los usuarios pueden ver los 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 global de la IU, como navegar a Media. |
Asistentes | Android proporciona mecanismos para que diferentes apps de asistentes de voz interactúen con el sistema. Estas apps pueden interactuar con 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 de 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 fuente de contenido multimedia, que complementa o reemplaza al selector de apps como punto de partida del contenido multimedia. |
Google Play Store | Cuando se usa GAS, los usuarios ubican e instalan apps nuevas en un dispositivo Android. En el caso del contenido multimedia, una vez que se instalan las apps, los usuarios se dirigen al contenido 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 realiza un seguimiento y controla las sesiones multimedia de todas las fuentes multimedia. Proporciona mecanismos para detectar cuándo una fuente de contenido multimedia se convierte en la fuente de contenido multimedia en primer plano. El contenido multimedia y todas las demás apps que muestran la fuente de contenido multimedia que se está reproduciendo (por ejemplo, la pantalla principal) usan el Administrador de sesiones multimedia para detectar estos eventos y actualizar la IU según corresponda. Las fuentes de contenido multimedia interactúan con el Administrador de sesiones multimedia a través de la API de Media Session. |
Radio | Es una app 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 IU que comparten Radio y Media permiten al usuario cambiar entre las dos experiencias. |
Motor de distracción del conductor | Es el servicio del sistema Android que se usa para imponer restricciones de UX según el estado de conducción del automóvil. En el caso de la UX de acceso y configuración de fuentes multimedia (en la que las fuentes multimedia controlan directamente la pantalla), este servicio garantiza que no se muestre contenido no seguro cuando el vehículo esté en estado de conducción. Los OEMs 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
Inicio de la app multimedia
A continuación, se muestra el proceso que inicia Media.
Figura 2: Inicio de la app multimedia
El contenido multimedia se debe iniciar con el siguiente CAR_INTENT_ACTION_MEDIA_TEMPLATE
implícito.
Este intent puede tener la siguiente información como elementos adicionales:
-
android.car.intent.extra.MEDIA_COMPONENT
(opcional). Cadena adicional para representar el nombre del componente aplanado de unMediaBrowserService
en la app de música a la que se conectará el contenido multimedia. Si no se proporciona, Media muestra la app de música seleccionada actualmente. Este intent se usa desde los siguientes puntos de entrada:-
IU del sistema. Se usa para volver a la experiencia de contenido multimedia o para comenzar a usarla por primera vez. En este caso, se usaría el intent anterior sin ningún elemento adicional para que Media muestre la app de música seleccionada actualmente.
-
Pantalla principal, asistentes y Centro de notificaciones. Los usuarios pueden navegar a Media para mostrar la app de música seleccionada actualmente. En todos los casos, se activa el intent implícito sin extras.
-
Selector de aplicaciones. Cuando los usuarios seleccionan una app de música desde el selector de apps, el intent anterior incluye el elemento adicional
CAR_EXTRA_MEDIA_COMPONENT
, que contiene la app de música seleccionada. El contenido multimedia la designa como la app recién seleccionada y se conecta a ella. Para obtener más información, consulta la siguiente sección, Integración de Media en el selector de apps.
-
Integración del selector de aplicaciones en Media
Las apps de música no pueden proporcionar ninguna actividad con anotaciones de la categoría android.intent.category.LAUNCHER
. Como resultado, el selector de apps (o su equivalente) debe implementar una lógica especial para abordar la integración de fuentes de contenido multimedia:
-
El selector de apps debe analizar el sistema en busca de paquetes que implementen
MediaBrowserService.SERVICE_INTERFACE
. En el caso de estos paquetes, el selector de apps recupera el ícono del servicio similar al que se usa para recuperar otras actividades. -
Luego, el selector de apps combina estos paquetes con los que implementan actividades
android.intent.category.LAUNCHER
. Si una app proporciona una implementación deMediaBrowserService
y una actividad de selector, el servicio tiene prioridad.En el momento de escribir este artículo, ninguna app de fuente de contenido multimedia 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 abordan las APIs de Android Media, por ejemplo:
- Acceso
- Salir
- Cambio de cuenta
- La pantalla a la que el usuario accedió actualmente (si corresponde)
- Configuración del servicio
Figura 3: Flujo de acceso
La app de música 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>
El contenido multimedia debe implementar la siguiente lógica:
-
Verifica que la app de música 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 vehículo están vigentes (por ejemplo, el vehículo está en movimiento), se debe inhabilitar esta indicación visual, 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 multimedia a través de la API de Android Media Session. Como parte de esta API, Media recibe un objeto PlaybackState
, que comunica el estado actual de la app de música.
El proceso de acceso comienza cuando la app multimedia cambia de PlaybackState
a STATE_ERROR
, incluido 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 indicación para navegar a una actividad de acceso que implementa la app de música.
Las apps pueden usar este mismo flujo para indicar 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
, Media debe verificar la siguiente entrada.
-
Código de error
PlaybackState
igual aPlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED
Esto indica que la app de música requiere acceso para continuar funcionando. Se pueden recibir otros códigos de error, lo que indicaría otros tipos de situaciones de error. -
El mensaje de error
PlaybackState
(que establecen las apps multimedia con el métodoPlaybackStateCompat.Builder#setErrorMessage
) contiene una explicación legible por humanos (por ejemplo, "No accediste"). Este mensaje se debe mostrar al usuario y debe estar optimizado para evitar distracciones mientras se conduce (DO). -
De manera opcional,
PlaybackState
puede incluir los siguientes elementos adicionales (configurados por las apps de música 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 por humanos que se mostrará en el botón que el usuario presione para iniciar el flujo de acceso. -
android.media.extras.ERROR_RESOLUTION_ACTION_INTENT
. Se establece con unPendingIntent
para que se active cuando el usuario haga clic en el botón mencionado anteriormente. EstePendingIntent
apunta a una actividad de acceso personalizada que implementa la misma app de música.
-
-
El estado
PlaybackState
es igual aSTATE_ERROR
. Esto indica que no se puede realizar ninguna otra operación hasta que se complete el acceso.