Od poziomu 3 interfejsu Car App API możesz używać interfejsów Car App Library API, aby uzyskiwać dostęp do właściwości i czujników pojazdu.
Wymagania
Aby używać interfejsów API z Androidem Auto, zacznij od dodania zależności od androidx.car.app:app-projected do pliku build.gradle modułu Androida Auto. W przypadku systemu operacyjnego Android Automotive dodaj zależność od
androidx.car.app:app-automotive do pliku build.gradle modułu Android Automotive.
Dodatkowo w pliku AndroidManifest.xml musisz zadeklarować odpowiednie uprawnienia potrzebne do wysyłania żądań dotyczących danych samochodu, których chcesz używać. Użytkownik musi też przyznać Ci te uprawnienia. Możesz używać tego samego kodu w Androidzie Auto i Androidzie Automotive OS, zamiast tworzyć przepływy zależne od platformy. Wymagane uprawnienia są jednak różne.
CarInfo
W tej tabeli opisujemy właściwości udostępniane w interfejsach CarInfo API oraz uprawnienia, o które musisz poprosić, aby ich używać.
| Metody | Właściwości | Uprawnienia: Android Auto |
Uprawnienia: AAOS |
Car App API |
|---|---|---|---|---|
fetchModel |
Marka, model, rok | android.car.permission.CAR_INFO |
3 | |
fetchEnergyProfile |
Typy złączy EV, rodzaje paliw | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_INFO |
3 |
fetchExteriorDimensions
Dane dostępne tylko w niektórych pojazdach z AAOS z interfejsem API w wersji 30 lub nowszej. |
Wymiary zewnętrzne | Nie dotyczy | android.car.permission.CAR_INFO |
7 |
| Stan karty płatności, typ karty płatności | 3 | |||
| Poziom baterii, poziom paliwa, niski poziom paliwa, pozostały zasięg | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Rzeczywista prędkość, prędkość wyświetlana (na wyświetlaczu w samochodzie) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Odległość z drogomierza | com.google.android.gms.permission.CAR_MILEAGE |
Dane nie są dostępne dla aplikacji na Androida Automotive OS zainstalowanych z Google Play. | 3 |
Aby na przykład uzyskać pozostały zakres, utwórz instancję obiektu CarInfo, a następnie utwórz i zarejestruj 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);
Nie zakładaj, że dane z samochodu są dostępne przez cały czas. Jeśli pojawi się błąd, sprawdź stan żądanej wartości, aby lepiej zrozumieć, dlaczego nie można było pobrać żądanych danych. Więcej informacji o definicji klasy CarInfo znajdziesz w dokumentacji referencyjnej.
CarSensors
Klasa CarSensors umożliwia dostęp do akcelerometru, żyroskopu, kompasu i danych o lokalizacji pojazdu. Dostępność tych wartości może zależeć od producenta OEM. Format danych z akcelerometru, żyroskopu i kompasu jest taki sam jak w przypadku interfejsu SensorManager API.
Aby na przykład sprawdzić kierunek pojazdu:
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);
Aby uzyskać dostęp do danych o lokalizacji z samochodu, musisz też zadeklarować uprawnienie android.permission.ACCESS_FINE_LOCATION i o nie poprosić.
Test
Aby symulować dane z czujników podczas testowania w Androidzie Auto, zapoznaj się z sekcjami Czujniki i Konfiguracja czujników w przewodniku po jednostce głównej na komputer. Aby symulować dane z czujników podczas testowania w systemie operacyjnym Android Automotive, zapoznaj się z sekcją Emulowanie stanu sprzętu w przewodniku po emulatorze systemu operacyjnego Android Automotive.