API per l'hardware dell'auto

A partire dal livello 3 dell'API Car App, puoi utilizzare le API Car App Library per accedere a proprietà e sensori del veicolo.

Requisiti

Per utilizzare le API con Android Auto, inizia aggiungendo una dipendenza da androidx.car.app:app-projected al file build.gradle per il modulo Android Auto. Per Android Automotive OS, aggiungi una dipendenza da androidx.car.app:app-automotive al file build.gradle per il modulo Android Automotive OS.

Inoltre, nel file AndroidManifest.xml devi dichiarare le autorizzazioni pertinenti necessarie per richiedere i dati dell'auto che vuoi utilizzare. Queste autorizzazioni devono anche esserti concesse dall'utente. Puoi utilizzare lo stesso codice su Android Auto e Android Automotive OS, anziché creare flussi dipendenti dalla piattaforma. Tuttavia, le autorizzazioni necessarie sono diverse.

CarInfo

Questa tabella descrive le proprietà fornite nelle API CarInfo e le autorizzazioni che devi richiedere per utilizzarle.

Metodi Proprietà Autorizzazioni:
Android Auto
Autorizzazioni:
AAOS
API Car App
fetchModel Marca, modello, anno android.car.permission.CAR_INFO 3
fetchEnergyProfile Tipi di connettori EV, tipi di carburante com.google.android.gms.permission.CAR_FUEL android.car.permission.CAR_INFO 3
fetchExteriorDimensions

Dati disponibili solo su alcuni veicoli AAOS con API 30 o versioni successive.

Dimensioni esterne N/D android.car.permission.CAR_INFO 7

addTollListener

removeTollListener

Stato tessera pedaggi, tipo di tessera pedaggi 3

addEnergyLevelListener

removeEnergyLevelListener

Livello batteria, livello carburante, livello carburante basso, autonomia rimanente 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

Velocità grezza, velocità visualizzata (mostrata sul display del cruscotto dell'auto) com.google.android.gms.permission.CAR_SPEED android.car.permission.CAR_SPEED

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addMileageListener

removeMileageListener

Distanza odometro com.google.android.gms.permission.CAR_MILEAGE Dati non disponibili per le app Android Automotive OS installate da Google Play. 3

Ad esempio, per ottenere l'intervallo rimanente, crea un'istanza di un oggetto CarInfo, quindi crea e 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);

Non dare per scontato che i dati dell'auto siano sempre disponibili. Se ricevi un errore, controlla lostato del valore che hai richiesto per capire meglio perché i dati che hai richiesto non sono stati recuperati. Per saperne di più sulla definizione della classe CarInfo, consulta la documentazione di riferimento.

CarSensors

La classe CarSensors ti consente di accedere ai dati di accelerometro, giroscopio, bussola e posizione del veicolo. La disponibilità di questi valori può dipendere dall'OEM. Il formato dei dati di accelerometro, giroscopio e bussola è lo stesso che otterresti dall'API SensorManager.

Ad esempio, per controllare la direzione del veicolo:

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);

Per accedere ai dati sulla posizione dall'auto, devi anche dichiarare e richiedere l'autorizzazione android.permission.ACCESS_FINE_LOCATION.

Test

Per simulare i dati dei sensori durante i test su Android Auto, consulta le sezioni Sensori e Configurazione dei sensori della guida all'unità principale di prova. Per simulare i dati dei sensori durante i test su Android Automotive OS, consulta la sezione Emulazione dello stato dell'hardware nella guida all'emulatore Android Automotive OS.