Cómo extender tu app de música a Android para vehículos

Lleva tu app a vehículos con Android Auto o el SO Android Automotive. Usa una arquitectura de app que funcione en ambos casos para que todos los usuarios puedan disfrutarla.

¿Qué es Android para vehículos?

Una app de música para vehículos puede proporcionar una forma para que los usuarios conecten sus vidas digitales sin problemas con sus vehículos. Si extiendes las mismas apps para que los teléfonos estén disponibles para automóviles, se brinda una mejor experiencia del usuario. Para lograrlo, realiza la integración con Android Auto o el SO Android Automotive.

Las apps para Android para vehículos deben evitar la distracción del conductor por sobre todas las cosas. Puedes minimizar las distracciones siguiendo las prácticas recomendadas, como usar comandos por voz y un diseño visual muy práctico. De esta manera, tu app de música puede mostrar información oportuna al conductor solo cuando sea relevante y usar patrones predecibles para tareas comunes.

Android Auto

Android Auto ofrece una experiencia de apps optimizadas para conductores a usuarios que tienen teléfonos Android con la app de Android Auto y vehículos o sistemas estéreo compatibles. Podrán usar tu app directamente en la pantalla del vehículo conectando el teléfono. Puedes habilitar la conexión de Android Auto con la app del teléfono si creas servicios que Android Auto use para mostrar una interfaz optimizada para conductores.

SO Android Automotive

El SO Android Automotive es un sistema de infoentretenimiento basado en Android que está integrado en vehículos. El sistema del auto es un dispositivo Android autónomo que está optimizado para la conducción. Con el SO Android Automotive, los usuarios instalan tu app directamente en el auto, en lugar de sus teléfonos.

Categorías de app compatibles

Las apps de música permiten que los usuarios exploren y reproduzcan música, radio, audiolibros y otro contenido de audio en el vehículo. Si quieres obtener más información, consulta Cómo compilar apps de reproducción de audio para vehículos. Puedes obtener más información en Cómo compilar apps de música para vehículos.

Las apps de música se compilan con MediaLibraryService y MediaSession. En el SO Android Automotive, también puedes compilar pantallas de acceso y configuración (para usar mientras el vehículo está estacionado) usando Views o Compose.

Las apps de video permiten que los usuarios miren videos en streaming mientras el vehículo está estacionado. El propósito principal de estas apps es mostrar videos en streaming. Estas apps se compilan con Views o Compose. Para obtener más información, consulta Cómo compilar apps de reproducción de video para el SO Android Automotive. Obtén más información en Cómo compilar apps de video para el SO Android Automotive.

Cómo compilar apps de reproducción de audio para vehículos

En esta guía, se da por sentado que ya tienes una app de reproducción de contenido multimedia básica. Si no es así, para comenzar, consulta Cómo crear una app básica de reproductor multimedia.

En esta guía, se proporciona información sobre lo que debes hacer, incluidos vínculos a más recursos con orientación específica.

Componentes de reproducción

Media3 ofrece varios componentes clave para los casos de uso de reproducción. Si trabajaste con bibliotecas multimedia anteriores de Android, ya conoces las clases que componen estos componentes.

En el siguiente diagrama, se muestra cómo se unen estos componentes en una app típica.

Los diferentes componentes de una app de música que usa Media3 se conectan entre sí de varias maneras simples debido a que comparten interfaces y clases.
Figura 1: Componentes de la app de música

Para obtener más información, consulta Componentes de reproducción.

Implementa MediaLibraryService y MediaLibrarySession.

Un objeto MediaLibraryService proporciona una API estandarizada para publicar anuncios y permitir el acceso a tu biblioteca multimedia. Esto es obligatorio cuando se agrega compatibilidad con Android Auto o el SO Android Automotive a tu app de música, ya que estas plataformas proporcionan su propia IU segura para conductores con tu biblioteca multimedia. Para obtener más información sobre la implementación y el uso de un MediaLibraryService, consulta Entrega contenido con MediaLibraryService.

Para los controles de reproducción, usa una sesión multimedia. La API de MediaSession proporciona una manera universal de interactuar con un reproductor de audio o video. La biblioteca de Jetpack Media3 incluye MediaLibrarySession, que extiende MediaSession para agregar APIs de navegación de contenido.

Si conectas una sesión multimedia a un reproductor, una app podrá anunciar la reproducción de contenido multimedia de forma externa y recibir comandos de reproducción de fuentes externas, como Android Auto, el SO Android Automotive o Asistente de Google. Si deseas obtener más información, consulta Cómo controlar y anunciar la reproducción con una MediaSession y Cómo usar una MediaLibrarySession.

Como mínimo, la sesión multimedia debe declarar la compatibilidad con los siguientes comandos del reproductor:

En la guía Cómo habilitar los controles de reproducción, se describen las maneras en las que puedes personalizar los controles de reproducción en vehículos.

Cuando Android Auto o el SO Android Automotive se conectan a tu app, solicitan que se muestre una biblioteca de contenido, lo que activa el método de devolución de llamada onGetLibraryRoot(). Puedes mostrar rápidamente un elemento multimedia raíz para permitir el acceso a tu biblioteca. Se llama al método de devolución de llamada onGetChildren() cuando Android Auto o el SO Android Automotive intentan explorar niveles más profundos de la biblioteca de contenido.

Estas plataformas aplican límites adicionales en la estructura de tu biblioteca de contenido. Para obtener detalles sobre cómo personalizar la forma en que se muestra tu biblioteca de contenido, consulta la guía Cómo crear tu servicio de navegador multimedia.

Cómo declarar la compatibilidad con Android Auto

Usa la siguiente entrada del manifiesto para declarar que tu aplicación para teléfonos es compatible con Android Auto:

<application>
    ...
    <meta-data android:name="com.google.android.gms.car.application"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

Esta entrada de manifiesto hace referencia a un archivo en formato XML que declara con qué capacidades de Automotive es compatible tu app. Para indicar que tienes una app de música, agrega un archivo en formato XML llamado automotive_app_desc.xml al directorio res/xml/ de tu proyecto. Este archivo debe incluir el siguiente contenido:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

Cómo declarar la compatibilidad con el SO Android Automotive

Debes crear un módulo de Automotive, ya que no toda la lógica de tu app se puede compartir con una de Automotive. Algunos componentes del SO Android Automotive, como el manifiesto, tienen requisitos específicos de la plataforma. Crea un módulo que pueda mantener el código de esos componentes separado de otro código del proyecto, como el que se usa en la app para dispositivos móviles.

Sigue estos pasos para agregar un módulo automotor a tu proyecto:

  1. En Android Studio, haz clic en File > New > New Project.
  2. Selecciona Automotive Module y, luego, haz clic en Next.
  3. Proporciona la información de Application/Library name. Se trata del nombre que los usuarios ven para tu app en el SO Android Automotive.
  4. Proporciona un nombre de módulo en Module name.
  5. Ajusta el valor de Package name para que coincida con tu app.
  6. Selecciona API 28:Android 9.0 (Pie) para Minimum SDK y, luego, haz clic en Next.

    Todos los vehículos compatibles con el SO Android Automotive se ejecutan en Android 9 (nivel de API 28) o versiones posteriores. Por lo tanto, si seleccionas este valor, se orientará a todos los vehículos compatibles.

  7. Selecciona No Activity y, luego, haz clic en Finish.

Después de crear tu módulo en Android Studio, abre el archivo AndroidManifest.xml en tu nuevo módulo de Automotive:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

</manifest>

El elemento application tiene información estándar de la app y un elemento uses-feature que declara compatibilidad con el SO Android Automotive. Observa que no hay actividades declaradas en el manifiesto.

Si implementas actividades de acceso o configuración, agrégalas aquí. El sistema activa estas actividades con intents explícitos, y esas son las únicas actividades que declaras en el manifiesto de tu app con SO Android Automotive.

Después de agregar las actividades de configuración o acceso, completa tu archivo de manifiesto configurando el atributo android:appCategory="audio" en el elemento application y agregando los siguientes elementos uses-feature:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:appCategory="audio"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.portrait"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.landscape"
        android:required="false" />

</manifest>

Configurar de forma explícita estas funciones como required="false" garantiza que la app no entre en conflicto con las funciones de hardware disponibles en dispositivos con el SO Android Automotive.

Usa la siguiente entrada del manifiesto para declarar que tu app es compatible con el SO Android Automotive:

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

Esta entrada de manifiesto hace referencia a un archivo en formato XML que declara qué capacidades de Automotive admite tu app.

Para indicar que tienes una app de música, agrega un archivo en formato XML llamado automotive_app_desc.xml al directorio res/xml/ de tu proyecto. Incluye el siguiente contenido en este archivo:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

Filtros de intents

El SO Android Automotive usa intents explícitos para activar actividades en tu app de música. No incluyas ninguna actividad que tenga filtros de intents CATEGORY_LAUNCHER o ACTION_MAIN en el archivo de manifiesto.

Las actividades como la que se muestra en el siguiente ejemplo suelen orientarse a un teléfono o a otro dispositivo móvil. Declara estas actividades en el módulo que compila la aplicación para teléfonos, no en el que compila tu app del SO Android Automotive.

<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>

Pasos adicionales

Ahora que tienes una app para Android Auto y el SO Android Automotive, te recomendamos que realices pasos adicionales para optimizarla y usarla de manera más segura durante la conducción. Para obtener más recomendaciones que te ayuden a garantizar una experiencia del usuario segura y conveniente, consulta las guías técnicas sobre Acciones de voz, Protecciones contra distracciones y Manejo de errores.

Cómo compilar apps de reproducción de video para el SO Android Automotive

Debido a que las apps de video se clasifican por separado de las apps de música en vehículos, debes tener en cuenta algunos requisitos específicos para las apps de video, como se describe en Cómo compilar apps para usar en el SO Android Automotive con el vehículo estacionado y en Cómo compilar apps de video para el SO Android Automotive. Debes seguir estas instrucciones.

Marca tu app como app de video

Para indicar que tu app admite videos, agrega un archivo en formato XML llamado automotive_app_desc.xml al directorio res/xml/ de tu proyecto. En este archivo, incluye el siguiente contenido:

<automotiveApp>
    <uses name="video"/>
</automotiveApp>

Luego, dentro del elemento application de tu manifiesto, agrega el siguiente elemento meta-data que hace referencia al archivo en formato XML:

<meta-data android:name="com.android.automotive"
    android:resource="@xml/automotive_app_desc"/>