A partir del nivel de API 3 de la app para vehículos, puedes usar las APIs de la Biblioteca de apps para vehículos para acceder a propiedades y sensores del vehículo.
Requisitos
Para usar las APIs con Android Auto, comienza agregando una dependencia en androidx.car.app:app-projected en el archivo build.gradle para tu módulo de Android Auto. Para el SO Android Automotive, agrega una dependencia en androidx.car.app:app-automotive en el archivo build.gradle para tu módulo del SO Android Automotive.
Además, en tu archivo AndroidManifest.xml, debes declarar los permisos relevantes para solicitar los datos del vehículo que quieres usar. El usuario también debe otorgarte estos permisos. Podrás usar el mismo código en Android Auto y en el SO Android Automotive, en lugar de crear flujos que dependen de la plataforma.
Sin embargo, los permisos necesarios difieren.
CarInfo
En esta tabla, se describen las propiedades que proporcionan las APIs de CarInfo y los permisos que debes solicitar para usarlas.
| Métodos | Propiedades | Permisos: Android Auto |
Permisos: AAOS |
API de Car App |
|---|---|---|---|---|
fetchModel |
Marca, modelo, año | android.car.permission.CAR_INFO |
3 | |
fetchEnergyProfile |
Tipos de conectores de VE, tipos de combustible | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_INFO |
3 |
fetchExteriorDimensions
Los datos solo están disponibles en algunos vehículos con AAOS que ejecutan la API 30 o una versión posterior. |
Dimensiones exteriores | N/A | android.car.permission.CAR_INFO |
7 |
| Estado de tarjeta de peaje, tipo de tarjeta de peaje | 3 | |||
| Nivel de batería, nivel de combustible, nivel de combustible bajo, rango remanente | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Velocidad sin procesar, velocidad en pantalla (se muestra en la pantalla de clúster del vehículo) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Distancia del odómetro | com.google.android.gms.permission.CAR_MILEAGE |
Los datos no están disponibles para las apps del SO Android Automotive instaladas desde Google Play. | 3 |
Por ejemplo, para obtener el rango restante, crea una instancia del objeto CarInfo y, luego, crea y registra un OnCarDataAvailableListener:
val carInfo = carContext.getCarService(CarHardwareManager::class.java).carInfo val listener = OnCarDataAvailableListener<EnergyLevel> { data -> if (data.rangeRemainingMeters.status == CarValue.STATUS_SUCCESS) { val rangeRemaining = data.rangeRemainingMeters.value } else { // Handle error } } carInfo.addEnergyLevelListener(carContext.mainExecutor, listener) // ... // Unregister the listener when you no longer need updates carInfo.removeEnergyLevelListener(listener)
No asumas que los datos del automóvil estarán disponibles en todo momento. Si recibes un error, verifica el estado del valor que solicitaste para entender mejor por qué no se pudieron recuperar los datos requeridos. Para obtener más información sobre la definición de la clase CarInfo, consulta la documentación de referencia.
CarSensors
La clase CarSensors te brinda acceso al acelerómetro, al giroscopio, a la brújula y a los datos de ubicación del vehículo. La disponibilidad de estos valores podría depender del OEM. El formato de los datos del acelerómetro, del giroscopio y de la brújula es igual al que obtendrías de la API de SensorManager.
Por ejemplo, para verificar la orientación del vehículo, haz lo siguiente:
val carSensors = carContext.getCarService(CarHardwareManager::class.java).carSensors val listener = OnCarDataAvailableListener<Compass> { data -> if (data.orientations.status == CarValue.STATUS_SUCCESS) { val orientation = data.orientations.value } else { // Data not available, handle error } } carSensors.addCompassListener(CarSensors.UPDATE_RATE_NORMAL, carContext.mainExecutor, listener) // ... // Unregister the listener when you no longer need updates carSensors.removeCompassListener(listener)
Para acceder a los datos de ubicación del automóvil, también debes declarar y solicitar el permiso android.permission.ACCESS_FINE_LOCATION.
Prueba
Para simular los datos de sensores cuando realices pruebas en Android Auto, consulta las secciones Sensores y Configuración de sensores de la guía de la consola central de escritorio. Para simular los datos de sensores cuando realices pruebas en el SO Android Automotive, consulta Cómo emular el estado del hardware en la guía del emulador del SO Android Automotive.