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 korzystać z interfejsów API w Androidzie 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 systemu operacyjnego Android Automotive.
Dodatkowo w pliku AndroidManifest.xml musisz zadeklarować
odpowiednie uprawnienia wymagane do żądania danych samochodu, których chcesz używać. Użytkownik musi też przyznać Ci te
uprawnienia. Zamiast
tworzyć ścieżki zależne od platformy, możesz używać
tego samego kodu w Androidzie Auto i systemie operacyjnym Android Automotive. Wymagane uprawnienia są jednak inne.
CarInfo
W tej tabeli opisano 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 paliwa | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_INFO |
3 |
fetchExteriorDimensions
Dane dostępne tylko w niektórych pojazdach z systemem operacyjnym Android Automotive, które działają w interfejsie API 30 lub nowszym. |
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 | |
| Surowa prędkość, prędkość wyświetlana (pokazywana na wyświetlaczu samochodu) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Dystans na drogomierzu | com.google.android.gms.permission.CAR_MILEAGE |
Dane niedostępne dla aplikacji na system operacyjny Android Automotive zainstalowanych ze Sklepu Google Play. | 3 |
Aby na przykład uzyskać pozostały zasięg, 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 wystąpi
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 danych z akcelerometru pojazdu,
żyroskopu, kompasu i lokalizacji. Dostępność tych wartości może zależeć od producenta. Format danych z akcelerometru, żyroskopu,
i kompasu jest taki sam jak w przypadku interfejsu SensorManager API.
Aby na przykład sprawdzić kierunek jazdy 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ć i poprosić o uprawnienie android.permission.ACCESS_FINE_LOCATION.
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 komputerze. Aby symulować dane z czujników podczas testowania w systemie operacyjnym Android Automotive, zapoznaj się z Emulowanie stanu sprzętu w emulatorze systemu operacyjnego Android Automotive.