APIs de Car Hardware

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

addTollListener

removeTollListener

Estado de tarjeta de peaje, tipo de tarjeta de peaje 3

addEnergyLevelListener

removeEnergyLevelListener

Nivel de batería, nivel de combustible, nivel de combustible bajo, rango remanente com.google.android.gms.permission.CAR_FUEL android.car.permission.CAR_ENERGY

android.car.permission.CAR_ENERGY_PORTS

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addSpeedListener

removeSpeedListener

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_SPEED

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addMileageListener

removeMileageListener

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.