Antes de continuar, revise las Pautas sobre distracciones al conducir .
Esta página describe las reglas de Restricciones de experiencia del usuario (UX) del automóvil que puede usar para crear múltiples configuraciones de reglas de Restricciones de UX (por ejemplo, Unión Europea versus Japón) y luego determinar qué conjunto de reglas aplicar en tiempo de ejecución. Para obtener más información, consulte Restricciones de CarUx .
El servicio Car UX Restrictions permite a los desarrolladores definir una nueva configuración de Car UX Restrictions. Si un desarrollador desea modificar las reglas de restricción (por ejemplo, para cumplir con los estándares de seguridad locales), el desarrollador puede usar la API para definir la nueva configuración.
La API para establecer la configuración persiste solo en la nueva configuración. En otras palabras, la configuración no surte efecto inmediatamente. En cambio, la nueva configuración se carga cuando el servicio de Restricciones de UX se reinicia y el automóvil está estacionado. El servicio de coche se asegura de que el coche esté aparcado antes de recargar la nueva configuración.
Además del nuevo método de servicio de restricciones de UX, se proporcionan API para construir la configuración. El estado de selección de marcha y velocidad se convierte a uno de tres estados de conducción:
- Estacionado. Equipo en el parque.
- De marcha en vacío. La marcha no está en estacionamiento y la velocidad es cero.
- Moviente. La marcha no está en estacionamiento y la velocidad no es cero.
Para saber cómo las aplicaciones consumen el estado de conducción de un automóvil y las restricciones de UX correspondientes, consulte Consumo del estado de conducción del automóvil y restricciones de UX .
Configuración de restricciones basada en los estados de la unidad
Para evitar distracciones 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. Irrestricto.
- De marcha en vacío. Sin vídeo ni pantalla de configuración.
- Moviente. Totalmente restringido (se requieren todas las restricciones).
El mapeo ilustrado arriba está predeterminado y configurado como un recurso XML. El
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
luego 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 múltiples pantallas
De forma predeterminada, no se aplican restricciones a pantallas adicionales. Para crear configuraciones de restricción para varias pantallas, incluya la etiqueta RestrictionMapping
con el puerto físico para esa pantalla. Las restricciones apropiadas se aplican automáticamente a cada pantalla. En el siguiente ejemplo, las pantallas con ID de puerto físico 1 y 2 tienen configuraciones diferentes:
<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
Puede seleccionar cualquier nombre para el modo, como adolescente . En el siguiente ejemplo, se configuran diferentes restricciones para los modos predeterminado y de pasajero (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>Puede utilizar la API para establecer cualquier nombre de cadena para el modo. Por ejemplo, el método
setRestrictionMode(@NonNull String mode)
en CarUxRestrictionsManager. (Anteriormente, usaba el método setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
en CarUxRestrictionsManager).CarUxRestrictionsAPI de configuración
Restricciones con CarUxRestrictionsConfiguration
La nueva clase CarUxRestrictionsConfiguration
se asigna 1:1 al esquema de configuración XML actual. CarUxRestrictionsConfiguration
se puede construir con CarUxRestrictions. Builder
, que valida la configuración tras la compilación().
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();
CarUxRestrictionsManager API
Configure CarUxRestrictionsConfiguration
para la siguiente unidad con CarUxRestrictionsManager
. Este método requiere permiso, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
Conservar 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 ha guardado correctamente. Esta nueva configuración solo se utiliza cuando la unidad principal integrada (IHU) se reinicia y el automóvil está estacionado. Internamente, el servicio Restricciones de UX contiene dos conjuntos de configuraciones:
- Producción. Si bien es opcional, esta configuración suele estar presente. El servicio de restricciones de UX lee esta configuración al iniciarse.
- Escenificado. También es opcional, esta configuración no tiene ningún efecto sobre las restricciones de UX y se promueve a producción cuando comienza el servicio del automóvil y cuando el automóvil está estacionado.
Figura 1. Configuración de producción
Abordar fallas
Hasta que se reciba información sobre el estado de conducción de CarPropertyManager (por ejemplo, durante el arranque), no se aplicarán las restricciones de UX. El sistema funciona como si el estado de conducción fuera Estacionado.
Si falla la lectura de una configuración guardada (por ejemplo, resultados de ConfiguraciónNotFoundException), el servicio de Restricciones de UX vuelve al modo codificado y totalmente restringido:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Estado de conducción y restricciones de usuario
El siguiente contenido describe las interacciones que se muestran en el siguiente diagrama de diseño:
Figura 2. Interacciones entre estados impulsores
Propiedades utilizadas para derivar el estado de conducción.
Utilice los siguientes tres VehiclePropertyIds
para derivar el estado de conducción:
API disponibles para aplicaciones
El código reside en las siguientes ubicaciones:
Código | Ubicación |
---|---|
CarUxRestrictionsManager API públicas para registrarse para cambios de restricciones de UX. | /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
CarUxRestrictions Definición de restricciones de UX. | /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
CarDrivingStateManager API del sistema para registrarse para impulsar cambios de estado. | /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
Para simular estados de conducción, consulte Pruebas .
El contenido y el código de ejemplo de esta página están sujetos a las licencias que se describen en la licencia de contenido. Java y OpenJDK son marcas registradas de Oracle o sus entidades asociadas.
Última actualización: 2024-04-29 (UTC).