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 las propiedades y los 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 solicitar los datos del automóvil 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 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 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 |
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:
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, 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:
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 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.