Ограничения для пользователей автомобилей

Прежде чем продолжить, ознакомьтесь с рекомендациями по предотвращению отвлечения внимания во время вождения .

На этой странице описываются правила 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>
Вы можете использовать API для установки любого строкового имени для режима. Например, метод 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

Для моделирования состояний вождения см. раздел Тестирование .