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

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

Rzeczywista prędkość, prędkość wyświetlana (na wyświetlaczu w samochodzie) com.google.android.gms.permission.CAR_SPEED android.car.permission.CAR_SPEED

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addMileageListener

removeMileageListener

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 CzujnikiKonfiguracja 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.