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 contenido multimedia para automóviles puede brindarles a los usuarios una forma de conectar sus vidas digitales sin problemas con sus automóviles. Si extiendes las mismas apps para teléfonos a los automóviles, crearás una mejor experiencia del usuario. Para ello, puedes realizar 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 cuentan con teléfonos Android con la app de Android Auto y un vehículo o un sistema estéreo compatible. Pueden usar tu app directamente en la pantalla del auto 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. Para obtener más información, consulta Cómo compilar apps de reproducción de audio para vehículos. También 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. En Cómo compilar apps de video para el SO Android Automotive, encontrarás más información.
Cómo compilar apps de reproducción de audio para autos
En esta guía, se da por sentado que ya tienes una app básica de reproducción de contenido multimedia. Si no es así, para comenzar, ve a Cómo crear una app básica de reproductor multimedia.
En esta guía, se te brinda 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 casos de uso de reproducción. Si trabajaste con bibliotecas de medios anteriores de Android, las clases que componen estos componentes te resultarán familiares.
En el siguiente diagrama, se muestra cómo se combinan estos componentes en una app típica.
Para obtener más información, consulta Componentes de reproducción.
Implementa un MediaLibraryService
y un MediaLibrarySession
Un MediaLibraryService
proporciona una API estandarizada para publicar y permitir el acceso a tu biblioteca multimedia.
Esto es necesario cuando agregas 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 el conductor para tu biblioteca de música. Para obtener más información sobre cómo implementar y usar un MediaLibraryService
, consulta Cómo entregar contenido con MediaLibraryService.
Para los controles de reproducción, usa una sesión multimedia. La API de MediaSession
proporciona una forma universal de interactuar con un reproductor de audio o video. La biblioteca de Jetpack Media3 incluye MediaLibrarySession
, que extiende MediaSession
para agregar APIs de exploración de contenido.
Conectar una sesión multimedia a un reproductor permite que una app anuncie la reproducción de contenido multimedia de forma externa y reciba comandos de reproducción de fuentes externas, como Android Auto, el SO Android Automotive o el Asistente de Google. Para 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, tu sesión multimedia debe declarar compatibilidad con los siguientes comandos del reproductor:
En la guía Habilita los controles de reproducción, se describen las formas en que puedes personalizar los controles de reproducción en los automóviles.
Cuando Android Auto o el SO Android Automotive se conectan a tu app, solicitan una biblioteca de contenido para mostrar, lo que activa el método de devolución de llamada onGetLibraryRoot()
. Puedes devolver 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 tu biblioteca de contenido.
Estas plataformas aplican límites adicionales sobre 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 Crea tu servicio de navegador de medios.
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 para automóviles, ya que no toda la lógica de tu app se puede compartir con una app para automóviles. 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 estos componentes separado de otro código del proyecto, como el que se usa en tu app para dispositivos móviles.
Sigue estos pasos para agregar un módulo automotor a tu proyecto:
- En Android Studio, haz clic en File > New > New Project.
- Selecciona Automotive Module y, luego, haz clic en Next.
- Proporciona la información de Application/Library name. Se trata del nombre que los usuarios ven para tu app en el SO Android Automotive.
- Proporciona un nombre de módulo en Module name.
- Ajusta el valor de Package name para que coincida con tu app.
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.
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 configuración o acceso, 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 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 app 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, es posible que desees tomar medidas adicionales para optimizarla y que se pueda usar de forma más segura mientras conduces. 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 por voz, Protecciones contra distracciones y Control de errores.
Cómo compilar apps de reproducción de video para el SO Android Automotive
Dado que las apps de video se categorizan por separado de las apps de música en los automóviles, 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 automóvil con el vehículo estacionado y Cómo compilar apps de video para el SO Android Automotive. Debes seguir las siguientes instrucciones.
Marca tu app como app de video
Para indicar que tu app admite videos, agrega un archivo 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"/>