Начиная с уровня 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 |
| Штат, тип карты для оплаты проезда | 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)
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.