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 necesarios para requerir 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 son diferentes.
CarInfo
En esta tabla, se describen las propiedades que proporcionan las CarInfo APIs 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
Datos disponibles solo en algunos vehículos AAOS que ejecutan la API 30 o versiones posteriores. |
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 |
Datos no disponibles para las apps del SO Android Automotive instaladas desde Google Play. | 3 |
Por ejemplo, para obtener el rango remanente, crea una instancia del objeto CarInfo y, luego, crea y registra un OnCarDataAvailableListener:
Kotlin
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)
Java
CarInfo carInfo = getCarContext().getCarService(CarHardwareManager.class).getCarInfo();
OnCarDataAvailableListener<EnergyLevel> listener = (data) -> {
if(data.getRangeRemainingMeters().getStatus() == CarValue.STATUS_SUCCESS) {
float rangeRemaining = data.getRangeRemainingMeters().getValue();
} else {
// Handle error
}
};
carInfo.addEnergyLevelListener(getCarContext().getMainExecutor(), listener);
…
// Unregister the listener when you no longer need updates
carInfo.removeEnergyLevelListener(listener);
No asumas que los datos del vehículo estarán disponibles en todo momento. Si recibes un
error, verifica elestado 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,
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 SensorManager API.
Por ejemplo, para verificar la orientación del vehículo, haz lo siguiente:
Kotlin
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)
Java
CarSensors carSensors = getCarContext().getCarService(CarHardwareManager.class).getCarSensors();
OnCarDataAvailableListener<Compass> listener = (data) -> {
if (data.getOrientations().getStatus() == CarValue.STATUS_SUCCESS) {
List<Float> orientations = data.getOrientations().getValue();
} else {
// Data not available, handle error
}
};
carSensors.addCompassListener(CarSensors.UPDATE_RATE_NORMAL, getCarContext().getMainExecutor(),
listener);
…
// Unregister the listener when you no longer need updates
carSensors.removeCompassListener(listener);
Para acceder a los datos de ubicación del vehículo, también debes declarar y requerir el permiso android.permission.ACCESS_FINE_LOCATION.
Prueba
Para simular los datos de sensores cuando realizas 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 realizas pruebas en el SO Android Automotive, consulta Cómo emular el estado del hardware en la guía del emulador del SO Android Automotive.