Before you continue, review Driving Distraction Guidelines .
На этой странице описаны правила ограничений пользовательского опыта (UX) в автомобилях, которые можно использовать для создания нескольких конфигураций правил ограничений UX (например, Европейский Союз против Японии), а затем определить, какой набор правил следует применять во время выполнения. Для получения дополнительной информации см. CarUxRestrictions .
Сервис Car UX Restrictions позволяет разработчикам определять новые конфигурации ограничений Car UX. Если разработчик хочет изменить правила ограничений (например, для соответствия местным стандартам безопасности), он может использовать API для определения новой конфигурации.
API для установки конфигурации сохраняется только в новой конфигурации. Другими словами, конфигурация не вступает в силу немедленно. Вместо этого новая конфигурация загружается при перезапуске службы UX Restrictions , когда автомобиль находится в режиме парковки. Служба автомобиля проверяет, находится ли автомобиль в режиме парковки, прежде чем перезагрузить новую конфигурацию.
In addition to the new UX Restrictions service method, APIs are provided to construct the configuration. The state of gear selection and speed is converted to one of three drivingstates:
- Припарковано. Переключение на «Парковка».
- Холостой ход. Передача не в положении «Парковка», скорость равна нулю.
- Движение. Передача не в положение «Парковка», скорость не равна нулю.
To learn how apps consume a car's driving state and the corresponding UX restrictions, see Consuming Car Driving State and UX Restrictions .
Настройка ограничений на основе состояний привода.
To prevent driver distraction, Android maps the driving state to a set of UX Restriction
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java- Припарковано. Без ограничений.
- Работает в режиме холостого хода. Нет видео и экрана настроек.
- Moving. Fully restricted (all restrictions are required).
The mapping illustrated above is pre-determined and configured as an XML resource. The
/packages/services/Car/+/android17-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 CarUxRestrictionsConfiguration
Ограничения с помощью CarUxRestrictionsConfiguration
Новый класс CarUxRestrictionsConfiguration напрямую соответствует текущей 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
Set CarUxRestrictionsConfiguration for the next drive with CarUxRestrictionsManager . This method requires permission, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION .
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
CarUxRestrictionsConfiguration config);Сохраните новую конфигурацию ограничений пользовательского интерфейса.
При передаче новой конфигурации служба UX Restrictions возвращает логическое значение, указывающее на то, была ли новая конфигурация успешно сохранена. Эта новая конфигурация используется только при перезагрузке встроенного головного устройства (IHU) и парковке автомобиля. Внутри служба UX Restrictions содержит два набора конфигураций:
- Production. While optional, this configuration is often present. The UX Restrictions service reads this configuration when starting.
- Staged. Also optional, this configuration has no effect on UX Restrictions and is promoted to Production when the car service starts and when the car is parked.

Рисунок 1. Производственная конфигурация
Устранение сбоев
Until driving state information is received from CarPropertyManager (for example, during boot-up), UX Restrictions won't be enforced. The system performs as if the driving state is Parked.
Should reading a saved configuration fail (for example, SettingNotFoundException results), the UX Restrictions service falls back to the hard-coded, fully restricted mode:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Ограничения на движение и ограничения для пользователей в зависимости от штата.
The following content describes the interactions displayed in the following design diagram:

Рисунок 2. Взаимодействие состояний управления.
Свойства, используемые для определения состояния управления
Use the following three VehiclePropertyIds to derive the driving state:
API, доступные для приложений
Код находится в следующих местах:
| Код | Расположение |
|---|---|
CarUxRestrictionsManagerPublic APIs to register for UX Restriction changes. | /packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
CarUxRestrictionsОпределение ограничений пользовательского интерфейса. | /packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
CarDrivingStateManagerSystem APIs to register for driving state changes. | /packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
Для имитации состояний движения см. раздел «Тестирование» .
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2026-06-18 UTC.