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

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

На этой странице описаны правила ограничений взаимодействия с пользователем автомобиля (UX), которые можно использовать для создания нескольких конфигураций правил ограничений пользовательского интерфейса (например, Европейский Союз или Япония), а затем определить, какой набор правил применять во время выполнения. Для получения дополнительной информации см. CarUxRestrictions .

Служба Car UX Restrictions позволяет разработчикам определить новую конфигурацию Car UX Restrictions. Если разработчик хочет изменить правила ограничения (например, для соответствия местным стандартам безопасности), он может использовать API для определения новой конфигурации.

API для установки конфигурации сохраняется только в новой конфигурации. Другими словами, конфигурация вступает в силу не сразу. Вместо этого новая конфигурация загружается при перезапуске службы UX Restrictions и при парковке автомобиля. Перед перезагрузкой новой конфигурации автосервис проверяет, находится ли автомобиль в парке.

В дополнение к новому методу службы UX Restrictions предоставляются API для создания конфигурации. Состояние выбора передачи и скорости преобразуется в одно из трех состояний движения:

  • Припаркован. Шестерня в парке.
  • Холостой ход. Передача не в положении «Парковка», скорость равна нулю.
  • Движущийся. Передача не включена в паркинг и скорость не равна нулю.

Чтобы узнать, как приложения учитывают состояние вождения автомобиля и соответствующие ограничения UX, см. раздел «Использование состояния вождения автомобиля и ограничения UX» .

Конфигурация ограничений на основе состояний диска

Чтобы не отвлекать водителя, Android сопоставляет состояние вождения с набором ограничений UX. /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Припаркован. Неограниченный.
  • Холостой ход. Нет видео и нет экрана конфигурации.
  • Движущийся. Полностью ограничено (обязательны все ограничения).

Проиллюстрированное выше сопоставление заранее определено и настроено как ресурс XML. Затем /packages/services/Car/+/main/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>

Конфигурации для режимов ограничения

Вы можете выбрать любое имя для режима, например « подростковый» . В следующем примере для режимов по умолчанию и пассажирского режима настраиваются разные ограничения (ранее поддерживался только пассажирский режим):

<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).

CarUxRestrictionsConfiguration API

Ограничения с помощью CarUxRestrictionsConfiguration

Новый класс CarUxRestrictionsConfiguration сопоставляется 1:1 с текущей схемой конфигурации XML. CarUxRestrictionsConfiguration можно создать с помощью CarUxRestrictions. Builder , который проверяет конфигурацию при построении().

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 содержит два набора конфигураций:

  • Производство. Эта конфигурация не является обязательной, но часто присутствует. Служба UX Restrictions считывает эту конфигурацию при запуске.
  • Постановочный. Также необязательно, эта конфигурация не влияет на ограничения UX и повышается до уровня «Производство», когда запускается автосервис и когда автомобиль припаркован.

Производственная конфигурация

Рисунок 1. Производственная конфигурация

Неисправности адресов

Пока информация о состоянии вождения не будет получена от CarPropertyManager (например, во время загрузки), ограничения пользовательского интерфейса не будут применяться. Система работает так, как если бы автомобиль находился в состоянии «Припарковано».

В случае сбоя чтения сохраненной конфигурации (например, результатов SettingNotFoundException), служба UX Restrictions возвращается в жестко запрограммированный полностью ограниченный режим:

// Idling/moving state is fully restricted.
private static CarUxRestrictionsConfiguration generateDefaultConfig() {}

Режим вождения и ограничения пользователя

Следующий контент описывает взаимодействия, отображаемые на следующей схеме проекта:

Управление взаимодействием между состояниями

Рисунок 2. Взаимодействие состояний движения

Свойства, используемые для получения состояния вождения

Используйте следующие три VehiclePropertyIds для получения состояния вождения:

API, доступные приложениям

Код находится в следующих местах:

Код Расположение
CarUxRestrictionsManager
Публичные API для регистрации изменений ограничений UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Определение ограничений UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
Системные API для регистрации изменений состояния.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Чтобы смоделировать состояния вождения, см. Тестирование .