Прежде чем продолжить, ознакомьтесь с рекомендациями по предотвращению отвлечения внимания во время вождения .
На этой странице описываются правила Car User Experience (UX) Restrictions, которые можно использовать для создания нескольких конфигураций правил UX Restrictions (например, Европейский союз против Японии), а затем определения того, какой набор правил применять во время выполнения. Для получения дополнительной информации см. CarUxRestrictions .
Служба Car UX Restrictions позволяет разработчикам определять новую конфигурацию Car UX Restrictions. Если разработчик захочет изменить правила ограничений (например, для соответствия местным стандартам безопасности), он может использовать API для определения новой конфигурации.
API для установки конфигурации сохраняется только в новой конфигурации. Другими словами, конфигурация не вступает в силу немедленно. Вместо этого новая конфигурация загружается, когда служба UX Restrictions перезапускается и автомобиль находится в режиме Park. Служба автомобилей обеспечивает, чтобы автомобиль находился в режиме Park, прежде чем перезагружать новую конфигурацию.
В дополнение к новому методу обслуживания UX Restrictions, API предоставляются для построения конфигурации. Состояние выбора передачи и скорости преобразуется в одно из трех состояний вождения:
- Припаркован. Передача в положении «парк».
- Холостой ход. Передача не в положении «Парковка», скорость равна нулю.
- Движение. Передача не в положении «Парковка», скорость не равна нулю.
Чтобы узнать, как приложения используют состояние вождения автомобиля и соответствующие ограничения UX, см . раздел Использование состояния вождения автомобиля и ограничения UX .
Конфигурация ограничений на основе состояний приводов
Чтобы не отвлекать водителя, Android сопоставляет состояние вождения с набором ограничений UX.
/packages/services/Car/+/android16-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Припарковано. Без ограничений.
- На холостом ходу. Нет видео и экрана конфигурации.
- Переезд. Полностью ограничен (все ограничения обязательны).
Отображение, показанное выше, заранее определено и настроено как ресурс XML.
/packages/services/Car/+/android16-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
затем сохраняет правила в памяти. Затем служба сопоставляет текущее состояние вождения с ограничениями UX и транслирует текущие ограничения по всей системе.<!-- 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>
Конфигурации для режимов ограничения
Вы можете выбрать любое имя для режима, например teen . В следующем примере настраиваются различные ограничения для режимов по умолчанию и пассажира (ранее поддерживался только пассажирский режим):
<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 возвращает логическое значение, указывающее, была ли успешно сохранена новая конфигурация. Эта новая конфигурация используется только при перезапуске Integrated Head Unit (IHU) и парковке автомобиля. Внутренне служба UX Restrictions содержит два набора конфигураций:
- Производство. Хотя эта конфигурация необязательна, она часто присутствует. Служба ограничений UX считывает эту конфигурацию при запуске.
- Поэтапно. Также необязательно, эта конфигурация не влияет на ограничения UX и переходит в режим производства при запуске автосервиса и при парковке автомобиля.
Рисунок 1. Конфигурация производства
Адрес неудач
Пока информация о состоянии вождения не будет получена от CarPropertyManager (например, во время загрузки), ограничения UX не будут применяться. Система работает так, как будто состояние вождения — «Припаркован».
В случае сбоя чтения сохраненной конфигурации (например, в результате SettingNotFoundException) служба UX Restrictions возвращается в жестко запрограммированный, полностью ограниченный режим:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Ограничения по состоянию и пользователю
Следующий контент описывает взаимодействия, отображенные на следующей диаграмме дизайна:
Рисунок 2. Взаимодействие движущихся состояний
Свойства, используемые для определения состояния вождения
Используйте следующие три VehiclePropertyIds
для определения состояния вождения:
API, доступные для приложений
Код находится в следующих местах:
Код | Расположение |
---|---|
CarUxRestrictionsManager Публичные API для регистрации изменений ограничений UX. | /packages/services/Car/+/android16-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
CarUxRestrictions Определение ограничений UX. | /packages/services/Car/+/android16-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
CarDrivingStateManager Системные API для регистрации изменений состояния управления. | /packages/services/Car/+/android16-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
Для моделирования состояний вождения см. раздел Тестирование .
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-06-18 UTC.