Прежде чем продолжить, ознакомьтесь с рекомендациями по предотвращению отвлечения внимания во время вождения .
На этой странице описаны правила ограничений пользовательского опыта (UX) автомобиля, которые можно использовать для создания нескольких конфигураций правил ограничений UX (например, Европейский союз и Япония), а затем определения набора правил, которые следует применять во время выполнения. Подробнее см. в разделе CarUxRestrictions .
Сервис Car UX Restrictions позволяет разработчикам определять новую конфигурацию ограничений Car UX Restrictions. Если разработчику потребуется изменить правила ограничений (например, для соответствия местным стандартам безопасности), он может использовать API для определения новой конфигурации.
API для настройки конфигурации сохраняется только в новой конфигурации. Другими словами, конфигурация вступает в силу не сразу. Новая конфигурация загружается при перезапуске службы UX Restrictions , когда автомобиль находится в режиме парковки. Служба парковки проверяет, находится ли автомобиль в режиме парковки, перед загрузкой новой конфигурации.
В дополнение к новому методу обслуживания UX Restrictions, предоставляются API для создания конфигурации. Состояние выбранной передачи и скорости преобразуется в одно из трёх состояний вождения:
- Припаркован. Передача в положении «Парковка».
- Холостой ход. Передача не в положении «Парковка», скорость нулевая.
- Движение. Передача не в положении «Парковка», а скорость не равна нулю.
Чтобы узнать, как приложения используют состояние вождения автомобиля и соответствующие ограничения UX, ознакомьтесь со статьей Использование состояния вождения автомобиля и ограничения UX .
Конфигурация ограничений на основе состояний приводов
Чтобы предотвратить отвлечение водителя, Android сопоставляет состояние вождения с набором ограничений UX.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java- Припарковано. Без ограничений.
- Работает вхолостую. Нет видео и экрана конфигурации.
- Переезд. Полностью ограничен (соблюдены все ограничения).
Показанное выше сопоставление предопределено и настроено как XML-ресурс.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java сохраняет правила в памяти. Затем сервис сопоставляет текущее состояние вождения с ограничениями пользовательского интерфейса и транслирует текущие ограничения по всей системе.<!-- No restrictions when car is parked -->
<DrivingState car:state="parked">
<Restrictions car:requiresDistractionOptimization="false"
car:uxr="baseline"/>
</DrivingState>
<!-- Restrictions when car is idling -->
<DrivingState car:state="idling">
<Restrictions car:requiresDistractionOptimization="true"
car:uxr="no_video|no_config"/>
</DrivingState>
<!-- Restrictions for speed >= 0 m/s -->
<DrivingState car:state="moving" car:minSpeed="0.0">
<Restrictions car:requiresDistractionOptimization="true"
car:uxr="fully_restricted"/>
</DrivingState>Конфигурации для нескольких дисплеев
По умолчанию к дополнительным дисплеям ограничения не применяются. Чтобы создать конфигурации ограничений для нескольких дисплеев, добавьте тег RestrictionMapping с физическим портом этого дисплея. Соответствующие ограничения автоматически применяются к каждому дисплею. В следующем примере дисплеи с идентификаторами физических портов 1 и 2 имеют разные конфигурации:
<RestrictionMapping car:physicalPort="1">
<DrivingState car:state="moving">
<Restrictions car:requiresDistractionOptimization="true" car:uxr="no_keyboard|no_video"/>
</DrivingState>
</RestrictionMapping>
<RestrictionMapping car:physicalPort="2">
<DrivingState car:state="moving">
<Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</RestrictionMapping>Конфигурации для режимов ограничения
Вы можете выбрать любое название для режима, например, «подросток» . В следующем примере настраиваются различные ограничения для режима по умолчанию и режима пассажира (ранее поддерживался только режим пассажира ):
<DrivingState car:state="idling">
<Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
<Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>setRestrictionMode(@NonNull String mode) в CarUxRestrictionsManager. (Раньше для этого использовался метод setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) в CarUxRestrictionsManager.API-интерфейсы конфигурации CarUxRestrictions
Ограничения с помощью CarUxRestrictionsConfiguration
Новый класс CarUxRestrictionsConfiguration сопоставлен 1:1 с текущей схемой конфигурации XML. CarUxRestrictionsConfiguration можно создать с помощью CarUxRestrictions. Builder , который проверяет конфигурацию при выполнении метода build().
new CarUxRestrictionsConfiguration.Builder()
// Explicitly set restrictions for each driving state.
.setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED,
/* requiresOptimization= */ false,
/* restrictions= */ UX_RESTRICTIONS_BASELINE)
.setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_IDLING,
true,
UX_RESTRICTIONS_NO_VIDEO|UX_RESTRICTIONS_NO_SETUP)
.setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_MOVING,
true,
UX_RESTRICTIONS_FULLY_RESTRICTED)
// Set restriction parameters.
.setMaxStringLength(int max)
.setMaxCumulativeContentItems(int max)
.setMaxContentDepth(int max)
// Build a new CarUxRestrictionsConfiguration.
.build();API CarUxRestrictionsManager
Установите CarUxRestrictionsConfiguration для следующей поездки с помощью CarUxRestrictionsManager . Для этого метода требуется разрешение Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION .
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
CarUxRestrictionsConfiguration config);Сохраните новую конфигурацию ограничений UX
При передаче новой конфигурации служба UX Restrictions возвращает логическое значение, указывающее, была ли новая конфигурация успешно сохранена. Эта новая конфигурация используется только после перезапуска интегрированного головного устройства (IHU) и парковки автомобиля. Служба UX Restrictions содержит два набора конфигураций:
- Производственная среда. Хотя эта конфигурация необязательна, она часто присутствует. Служба UX Restrictions считывает эту конфигурацию при запуске.
- Эта конфигурация также необязательна , она не влияет на ограничения пользовательского опыта и переходит в режим производства при запуске автосервиса и припарковке автомобиля.

Рисунок 1. Конфигурация производства
Ошибки в адресе
Пока информация о состоянии вождения не будет получена от CarPropertyManager (например, во время загрузки), ограничения пользовательского опыта не будут применяться. Система работает так, как если бы состояние вождения было «Парковка».
В случае сбоя чтения сохраненной конфигурации (например, в результате возникает исключение SettingNotFoundException) служба UX Restrictions возвращается в жестко запрограммированный, полностью ограниченный режим:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Ограничения по состоянию и пользователю
Ниже приводится описание взаимодействий, отображенных на следующей диаграмме проектирования:

Рисунок 2. Взаимодействие движущихся состояний
Свойства, используемые для определения состояния вождения
Используйте следующие три VehiclePropertyIds для определения состояния вождения:
API, доступные для приложений
Код находится в следующих местах:
| Код | Расположение |
|---|---|
CarUxRestrictionsManagerПубличные API для регистрации изменений ограничений UX. | /packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
CarUxRestrictionsОпределение ограничений UX. | /packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
CarDrivingStateManagerСистемные API для регистрации с целью управления изменениями состояния. | /packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
Для моделирования состояний вождения см. раздел Тестирование .
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-11-12 UTC.