Начиная с уровня 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 |
| Состояние карты для оплаты проезда, тип карты для оплаты проезда | 3 | |||
| Уровень заряда батареи, уровень топлива, низкий уровень топлива, оставшийся запас хода | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Фактическая скорость, скорость на дисплее (показывается на приборной панели автомобиля) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Расстояние по одометру | 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.