Restricciones para la experiencia del usuario de vehículo

Antes de continuar, revisa los Lineamientos para conducir distracciones.

En esta página, se describen las reglas de restricciones de la experiencia del usuario (UX) del vehículo que puedes usar para crear múltiples parámetros de configuración de reglas de restricciones de UX (por ejemplo, Unión Europea frente a Japón) y, luego, determinar qué conjunto de reglas aplicar en el tiempo de ejecución. Para obtener más información, consulta CarUxRestricciones.

El servicio de restricciones de UX del vehículo permite que los desarrolladores definan nuevas restricciones de UX del vehículo. configuración. ¿El desarrollador debería modificar las reglas de restricción (por ejemplo, para cumplir con de seguridad), el desarrollador puede usar la API para definir la nueva configuración.

La API para establecer la configuración solo se mantiene en la configuración nueva. En otras palabras, La configuración no se aplica de inmediato. En cambio, la configuración nueva se cargará cuando se reinicie el servicio de restricciones de UX y el vehículo esté en la posición de estacionamiento. El servicio de reparación de automóviles garantiza que el automóvil esté en modo de estacionamiento antes de volver a cargar la nueva configuración.

Además del nuevo método de servicio de restricciones de UX, se proporcionan APIs para construir el configuración. El estado de la selección de engranaje y la velocidad se convierte en uno de los tres estados de conducción:

  • Estacionado. Equipos en el parque.
  • Inactividad. La marcha no está en el estado de estacionamiento y la velocidad es cero.
  • Mudanza. La marcha no está en el estado de estacionamiento y la velocidad no es cero.

Para descubrir cómo las apps consumen el estado de conducción de un vehículo y las restricciones de UX correspondientes, consulta Cómo consumir restricciones del estado de conducción y de la UX.

Configuración de restricciones basada en estados de conducción

Para evitar la distracción del conductor, Android asigna el estado de conducción a un conjunto de restricciones de UX. /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Estacionado. Sin restricciones.
  • Inactividad. Sin video ni pantalla de configuración.
  • Mudanza. Completamente restringido (se requieren todas las restricciones).

La asignación ilustrada anteriormente está predeterminada y configurada como un recurso XML. El /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java luego las guarda en la memoria. Luego, el servicio asigna el estado de conducción actual a las restricciones de UX. y transmite las restricciones actuales a todo el sistema.

<!-- 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>

Configuraciones para varias pantallas

De forma predeterminada, no se aplican restricciones a pantallas adicionales. Cómo crear una restricción configuraciones para varias pantallas, incluye la etiqueta RestrictionMapping con el físicoPort de esa pantalla. Las restricciones adecuadas se aplican automáticamente a cada pantalla. En el siguiente ejemplo, las pantallas con los IDs de puerto 1 y 2 físicos tienen diferentes parámetros de configuración:

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

Configuraciones de modos de restricción

Puedes seleccionar cualquier nombre para el modo, como adolescente. En el siguiente ejemplo, se configuran diferentes restricciones para los modos default y passenger (anteriormente, solo se admitía el modo de pasajero):

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
Puedes usar la API para establecer cualquier nombre de cadena para el modo. Por ejemplo, el setRestrictionMode(@NonNull String mode) en CarUxRestrictionsManager (Antes, se usaba el Método setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) en CarUxRestrictionsManager).

APIs de CarUxRestrictionsConfiguration

Restricciones con CarUxRestrictionsConfiguration

La nueva clase CarUxRestrictionsConfiguration se asigna 1:1 al XML actual. de configuración de Terraform. CarUxRestrictionsConfiguration se puede construir con CarUxRestrictions.Builder, que valida la configuración. sobre 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 de CarUxRestrictionsManager

Establece CarUxRestrictionsConfiguration para el próximo viaje con CarUxRestrictionsManager. Este método requiere permiso, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Conserva una nueva configuración de restricciones de UX

Cuando se pasa una nueva configuración, el servicio de restricciones de UX devuelve un valor booleano para indicar si la nueva configuración se guardó correctamente. Esta nueva configuración solo se usa cuando se reinicia la consola central integrada (IHU) y el automóvil está estacionado. A nivel interno, las Restricciones a la UX contiene dos conjuntos de configuraciones:

  • Producción. Aunque es opcional, esta configuración suele estar presente. La UX El servicio de restricciones lee esta configuración cuando se inicia.
  • Almacenado en etapa intermedia. También es opcional, esta configuración no tiene efecto en las restricciones de UX. y pasa a producción cuando se inicia el servicio de reparación del automóvil y cuando el vehículo está estacionado.

Configuración de producción

Figura 1: Configuración de producción

Errores de la dirección

Hasta que se reciba la información del estado de conducción de CarPropertyManager (por ejemplo, durante inicio), no se aplicarán restricciones de UX. El sistema se comporta como si el estado de conducción fuera Estacionado.

Si falla la lectura de una configuración guardada (por ejemplo, resultados de Configuración NotFoundException), el El servicio de restricciones de UX recurre al modo hard-coded y completamente restringido:

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

Estado de la conducción y restricciones para el usuario

El siguiente contenido describe las interacciones que se muestran en el siguiente diagrama de diseño:

Cómo controlar las interacciones de estado

Figura 2: Cómo controlar las interacciones de estado

Propiedades que se usan para derivar el estado de conducción

Usa los siguientes tres VehiclePropertyIds para derivar el estado de conducción:

APIs disponibles para las apps

El código se encuentra en las siguientes ubicaciones:

Código Ubicación
CarUxRestrictionsManager de
APIs públicas para registrar los cambios de restricción de UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions de
Definición de restricciones de UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
Las APIs del sistema se registran para controlar los cambios de estado.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Para simular estados de conducción, consulta Pruebas.