API автомобильного оборудования

Начиная с уровня 3 API для автомобильных приложений, вы можете использовать API библиотеки автомобильных приложений для доступа к свойствам автомобиля и датчикам.

Требования

Для использования API с Android Auto начните с добавления зависимости androidx.car.app:app-projected в файл build.gradle для вашего модуля Android Auto. Для Android Automotive OS добавьте зависимость androidx.car.app:app-automotive в файл build.gradle для вашего модуля Android Automotive OS.

Кроме того, в файле AndroidManifest.xml необходимо указать соответствующие разрешения, необходимые для запроса данных об автомобиле, которые вы хотите использовать. Эти разрешения также должны быть предоставлены вам пользователем. Вы можете использовать один и тот же код в Android Auto и Android Automotive OS, вместо создания зависимых от платформы потоков. Однако необходимые разрешения будут различаться.

CarInfo

В этой таблице описаны свойства, предоставляемые API CarInfo , и разрешения, которые необходимо запросить для их использования.

Методы Характеристики Права доступа:
Android Auto
Права доступа:
ААОС
API автомобильного приложения
fetchModel Марка, модель, год выпуска android.car.permission.CAR_INFO 3
fetchEnergyProfile Типы разъемов для электромобилей, типы топлива com.google.android.gms.permission.CAR_FUEL android.car.permission.CAR_INFO 3
fetchExteriorDimensions

Данные доступны только для некоторых транспортных средств AAOS, работающих под управлением API 30 или более поздних версий.

Внешние размеры Н/Д android.car.permission.CAR_INFO 7

addTollListener

removeTollListener

Штат, тип карты для оплаты проезда 3

addEnergyLevelListener

removeEnergyLevelListener

Уровень заряда батареи, уровень топлива, низкий уровень топлива, оставшийся запас хода 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

Исходная скорость, отображаемая скорость (на дисплее приборной панели автомобиля) com.google.android.gms.permission.CAR_SPEED android.car.permission.CAR_SPEED

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addMileageListener

removeMileageListener

Показания одометра com.google.android.gms.permission.CAR_MILEAGE Данные недоступны для приложений Android Automotive OS, установленных из Google Play. 3

Например, чтобы получить оставшийся диапазон, создайте объект CarInfo , а затем создайте и зарегистрируйте OnCarDataAvailableListener :

Котлин

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

Не следует предполагать, что данные с автомобиля всегда доступны. Если вы получили ошибку, проверьте статус запрошенного значения, чтобы лучше понять, почему запрошенные данные не удалось получить. Для получения дополнительной информации об определении класса CarInfo см. справочную документацию .

CarSensors

Класс CarSensors предоставляет доступ к данным акселерометра, гироскопа, компаса и местоположения автомобиля. Доступность этих значений может зависеть от производителя. Формат данных с акселерометра, гироскопа и компаса такой же, как и при использовании API SensorManager .

Например, чтобы проверить направление движения транспортного средства:

Котлин

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

Для доступа к данным о местоположении автомобиля также необходимо объявить и запросить разрешение android.permission.ACCESS_FINE_LOCATION .

Тест

Для имитации данных с датчиков при тестировании в Android Auto см. разделы «Датчики» и «Конфигурация датчиков» в руководстве по настольному головному устройству. Для имитации данных с датчиков при тестировании в Android Automotive OS см. раздел «Эмуляция состояния оборудования» в руководстве по эмулятору Android Automotive OS.