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 |
| Stato tessera pedaggi, tipo di tessera pedaggi | 3 | |||
| Livello batteria, livello carburante, livello carburante basso, autonomia rimanente | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Velocità grezza, velocità visualizzata (mostrata sul display del cruscotto dell'auto) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| 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.