Interfejsy API do sprzętu samochodowego

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

addTollListener

removeTollListener

Stan karty płatności, typ karty płatności 3

addEnergyLevelListener

removeEnergyLevelListener

Poziom baterii, poziom paliwa, niski poziom paliwa, pozostały zasięg 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

Surowa prędkość, prędkość wyświetlana (pokazywana na wyświetlaczu samochodu) com.google.android.gms.permission.CAR_SPEED android.car.permission.CAR_SPEED

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addMileageListener

removeMileageListener

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.