Antes de leer esta página, consulta las Directrices sobre la distracción del conductor.
En esta página, se describen las reglas de restricciones de la experiencia del usuario (UX) del automóvil que puedes usar para crear varias configuraciones de reglas de restricciones de UX (por ejemplo, la Unión Europea en comparación con Japón) y, luego, determinar qué conjunto de reglas se aplicará en el tiempo de ejecución. Para obtener más información, consulta CarUxRestrictions.
El servicio de restricciones de UX del automóvil permite a los desarrolladores definir una nueva configuración de restricciones de UX del automóvil. Si un desarrollador desea modificar las reglas de restricción (por ejemplo, para cumplir con los estándares de seguridad locales), puede usar la API para definir la nueva configuración.
La API para establecer la configuración persiste solo en la configuración nueva. En otras palabras, la configuración no entra en vigencia de inmediato. En cambio, la nueva configuración se carga cuando se reinicia el servicio de restricciones de UX y el automóvil está estacionado. El servicio del automóvil garantiza que el automóvil esté estacionado 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 la configuración. El estado de la selección de marchas y la velocidad se convierte en uno de los tres drivingstates:
- Estacionado (Gear in Park)
- Inactivo (Gear not in Park and speed is zero)
- En movimiento (Gear not in Park and speed isn't zero)
Para obtener información sobre cómo las apps consumen el estado de conducción de un automóvil y las restricciones de UX correspondientes, consulta Cómo consumir el estado de conducción del automóvil y las restricciones de UX.
Configuración de restricciones según los 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/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Estacionado (Unrestricted)
- Inactivo (No video and no configuration screen)
- En movimiento (Fully restricted [all restrictions are required])
La asignación ilustrada anteriormente está predeterminada y configurada como un recurso XML. Luego,
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
guarda las reglas 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 las pantallas adicionales. Para crear configuraciones de restricciones para varias pantallas, incluye la etiqueta RestrictionMapping con el physicalPort de esa pantalla. Las restricciones adecuadas se aplican automáticamente a cada pantalla. En el siguiente ejemplo, las pantallas con IDs de puerto físico 1 y 2 tienen diferentes configuraciones:
<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 para modos de restricción
Puedes seleccionar cualquier nombre para el modo, como teen. En el siguiente ejemplo, se configuran diferentes restricciones para los modos default y passenger (anteriormente, solo se admitía el modo passenger):
<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) en CarUxRestrictionsManager.
(Anteriormente, 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 esquema de configuración XML actual. CarUxRestrictionsConfiguration se puede construir con CarUxRestrictions., que valida la configuración
en 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 la próxima unidad con CarUxRestrictionsManager. Este método requiere el permiso Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
CarUxRestrictionsConfiguration config);Persiste una nueva configuración de restricciones de UX
Cuando se pasa una configuración nueva, el servicio de restricciones de UX muestra un valor booleano para indicar si la nueva configuración se guardó correctamente. Esta nueva configuración solo se usa cuando se reinicia la unidad principal integrada (IHU) y el automóvil está estacionado. Internamente, el servicio de restricciones de UX contiene dos conjuntos de configuraciones:
- Producción (Production). Si bien es opcional, esta configuración suele estar presente. El servicio de restricciones de UX lee esta configuración cuando se inicia.
- Publicación de prueba (Staged). Esta configuración también es opcional, no tiene efecto en las restricciones de UX y se promueve a producción cuando se inicia el servicio del automóvil y cuando el automóvil está estacionado.

Figura 1: Configuración de producción
Aborda las fallas
Hasta que se reciba la información del estado de conducción de CarPropertyManager (por ejemplo, durante el inicio), no se aplicarán las restricciones de UX. El sistema funciona como si el estado de conducción estuviera estacionado.
Si falla la lectura de una configuración guardada (por ejemplo, se obtienen resultados de SettingNotFoundException), el servicio de restricciones de UX vuelve al modo codificado y con restricción general:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Estado de conducción y restricciones del usuario
En el siguiente contenido, se describen las interacciones que se muestran en el siguiente diagrama de diseño:

Figura 2: Interacciones del estado de conducción
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 reside en las siguientes ubicaciones:
| Código | Ubicación |
|---|---|
CarUxRestrictionsManagerAPIs públicas para registrar cambios en las restricciones de UX. |
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictionsDefinición de restricciones de UX. |
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
APIs del sistema para registrar cambios en el estado de conducción. |
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Para simular estados de conducción, consulta Pruebas.