Перед тем как читать эту страницу, ознакомьтесь с рекомендациями по предотвращению отвлечения внимания водителя .
На этой странице описаны правила ограничений пользовательского опыта (UX) в автомобилях, которые можно использовать для создания нескольких конфигураций правил ограничений UX (например, Европейский Союз против Японии), а затем определить, какой набор правил следует применять во время выполнения. Для получения дополнительной информации см. CarUxRestrictions .
Сервис Car UX Restrictions позволяет разработчикам определять новые конфигурации ограничений Car UX. Если разработчик хочет изменить правила ограничений (например, для соответствия местным стандартам безопасности), он может использовать API для определения новой конфигурации.
API для установки конфигурации сохраняется только в новой конфигурации. Другими словами, конфигурация не вступает в силу немедленно. Вместо этого новая конфигурация загружается при перезапуске службы UX Restrictions , когда автомобиль находится в режиме парковки. Служба автомобиля проверяет, находится ли автомобиль в режиме парковки, прежде чем перезагрузить новую конфигурацию.
В дополнение к новому методу сервиса UX Restrictions, предоставляются API для построения конфигурации. Состояние выбора передачи и скорости преобразуется в одно из трех состояний движения:
- Припарковано. Переключение на «Парковка».
- Холостой ход. Передача не в положении «Парковка», скорость равна нулю.
- Движение. Передача не в положение «Парковка», скорость не равна нулю.
Чтобы узнать, как приложения используют данные о состоянии автомобиля и соответствующие ограничения пользовательского интерфейса, см. раздел «Использование данных о состоянии автомобиля и ограничений пользовательского интерфейса» .
Настройка ограничений на основе состояний привода.
Чтобы предотвратить отвлечение водителя, Android сопоставляет состояние за рулём с набором ограничений пользовательского интерфейса.
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java- Припарковано. Без ограничений.
- Работает в режиме холостого хода. Нет видео и экрана настроек.
- Переезд. Полные ограничения (все ограничения обязательны).
Представленная выше схема сопоставления предопределена и настроена как XML-ресурс.
/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
Установите CarUxRestrictionsConfiguration для следующей поездки с помощью CarUxRestrictionsManager . Для этого метода требуется разрешение Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION .
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
CarUxRestrictionsConfiguration config);Сохраните новую конфигурацию ограничений пользовательского интерфейса.
При передаче новой конфигурации служба UX Restrictions возвращает логическое значение, указывающее на то, была ли новая конфигурация успешно сохранена. Эта новая конфигурация используется только при перезагрузке встроенного головного устройства (IHU) и парковке автомобиля. Внутри служба UX Restrictions содержит два набора конфигураций:
- Производственная среда. Хотя эта конфигурация необязательна, она часто присутствует. Служба ограничений пользовательского интерфейса считывает эту конфигурацию при запуске.
- Эта конфигурация, являющаяся также необязательной, не влияет на ограничения пользовательского интерфейса и переходит в производственный режим при запуске службы такси и при парковке автомобиля.

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

Рисунок 2. Взаимодействие состояний управления.
Свойства, используемые для определения состояния управления
Используйте следующие три VehiclePropertyIds для определения состояния движения:
API, доступные для приложений
Код находится в следующих местах:
| Код | Расположение |
|---|---|
CarUxRestrictionsManagerПубличные API для регистрации изменений в UX-ограничениях. | /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 |
CarDrivingStateManagerСистемные API для регистрации изменений состояния системы. | /packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
Для имитации состояний движения см. раздел «Тестирование» .
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2026-07-16 UTC.