Car Hardware APIs

Начиная с уровня 3 Car App API, вы можете использовать Car App Library 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
Разрешения:
AAOS
Car App 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)

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

CarSensors

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

Например, чтобы проверить курс автомобиля:

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)

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

Тест

Чтобы имитировать данные датчиков при тестировании в Android Auto, ознакомьтесь с разделами Датчики и Настройка датчиков в руководстве по использованию Desktop Head Unit. Чтобы имитировать данные датчиков при тестировании в Android Automotive OS, ознакомьтесь с разделом Эмуляция состояния оборудования в руководстве по эмулятору Android Automotive OS.