Avant de continuer, consultez les consignes relatives aux distractions au volant.
Cette page décrit les règles de restrictions de l'expérience utilisateur dans la voiture que vous pouvez utiliser pour créer plusieurs configurations de règles de restrictions de l'expérience utilisateur (par exemple, Union européenne par rapport au Japon), puis déterminer l'ensemble de règles à appliquer au moment de l'exécution. Pour en savoir plus, consultez CarUxRestrictions.
Le service de restrictions de l'expérience utilisateur dans la voiture permet aux développeurs de définir une nouvelle configuration de restrictions de l'expérience utilisateur dans la voiture. Si un développeur souhaite modifier les règles de restriction (par exemple, pour se conformer aux normes de sécurité locales), il peut utiliser l'API pour définir la nouvelle configuration.
L'API permettant de définir la configuration ne persiste que dans la nouvelle configuration. En d'autres termes, la configuration ne prend pas effet immédiatement. La nouvelle configuration est chargée lorsque le service de restrictions de l'expérience utilisateur redémarre et que la voiture est garée. Le service de voiture s'assure que la voiture est garée avant de recharger la nouvelle configuration.
En plus de la nouvelle méthode de service de restrictions de l'expérience utilisateur, des API sont fournies pour créer la configuration. L'état de la sélection de vitesse et de la vitesse est converti en l'un des trois états de conduite suivants :
- Véhicule à l'arrêt Vitesse en position P.
- Ralenti Vitesse non en position P et vitesse nulle.
- En mouvement Vitesse non en position P et vitesse non nulle.
Pour savoir comment les applications consomment l'état de conduite d'une voiture et les restrictions de l'expérience utilisateur correspondantes, consultez Consommer l'état de conduite de la voiture et les restrictions de l'expérience utilisateur.
Configuration des restrictions en fonction des états de conduite
Pour éviter toute distraction du conducteur, Android mappe l'état de conduite à un ensemble de restrictions de l'expérience utilisateur
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java.
- Véhicule à l'arrêt Sans restriction.
- Ralenti Pas de vidéo ni d'écran de configuration.
- En mouvement Entièrement restreint (toutes les restrictions sont requises).
Le mappage illustré ci-dessus est prédéterminé et configuré en tant que ressource XML. Le
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
enregistre ensuite les règles en mémoire. Le service mappe ensuite l'état de conduite actuel aux restrictions de l'expérience utilisateur et diffuse les restrictions actuelles à l'ensemble du système.
<!-- 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>Configurations pour plusieurs écrans
Par défaut, aucune restriction n'est appliquée aux écrans supplémentaires. Pour créer des configurations de restriction pour plusieurs écrans, incluez la balise RestrictionMapping avec le physicalPort de cet écran. Les restrictions appropriées sont automatiquement appliquées à chaque écran. Dans l'exemple suivant, les écrans dont les ID de port physique sont 1 et 2 ont des configurations différentes :
<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>Configurations pour les modes de restriction
Vous pouvez sélectionner n'importe quel nom pour le mode, par exemple teen. Dans l'exemple suivant, différentes restrictions sont configurées pour les modes default et passenger (auparavant, seul le mode passenger était compatible) :
<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) dans CarUxRestrictionsManager.
(Auparavant, vous utilisiez la méthode setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) dans CarUxRestrictionsManager).
API CarUxRestrictionsConfiguration
Restrictions avec CarUxRestrictionsConfiguration
La nouvelle classe CarUxRestrictionsConfiguration est mappée 1:1 au schéma de configuration XML actuel. CarUxRestrictionsConfiguration peut être créé avec CarUxRestrictions., qui valide la configuration
lors de la création.
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
Définissez CarUxRestrictionsConfiguration pour le prochain trajet avec CarUxRestrictionsManager. Cette méthode nécessite l'autorisation Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
CarUxRestrictionsConfiguration config);Persister une nouvelle configuration de restrictions de l'expérience utilisateur
Lorsqu'une nouvelle configuration est transmise, le service de restrictions de l'expérience utilisateur renvoie une valeur booléenne indiquant si la nouvelle configuration a été enregistrée. Cette nouvelle configuration n'est utilisée que lorsque l'unité centrale intégrée redémarre et que la voiture est garée. En interne, le service de restrictions de l'expérience utilisateur contient deux ensembles de configurations :
- Production Bien que facultative, cette configuration est souvent présente. Le service de restrictions de l'expérience utilisateur lit cette configuration au démarrage.
- Par étapes Également facultative, cette configuration n'a aucun effet sur les restrictions de l'expérience utilisateur et est promue en production lorsque le service de voiture démarre et que la voiture est garée.

Figure 1. Configuration de la version en production
Résoudre les échecs
Tant que les informations sur l'état de conduite ne sont pas reçues de CarPropertyManager (par exemple, au démarrage), les restrictions de l'expérience utilisateur ne seront pas appliquées. Le système se comporte comme si l'état de conduite était "Véhicule à l'arrêt".
Si la lecture d'une configuration enregistrée échoue (par exemple, en cas de résultat SettingNotFoundException), le service de restrictions de l'expérience utilisateur revient au mode codé en dur et entièrement restreint :
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
État de conduite et restrictions utilisateur
Le contenu suivant décrit les interactions affichées dans le schéma de conception suivant :

Figure 2. Interactions de l'état de conduite
Propriétés utilisées pour déduire l'état de conduite
Utilisez les trois VehiclePropertyIds suivants pour déduire l'état de conduite :
API disponibles pour les applications
Le code se trouve aux emplacements suivants :
| Code | Emplacement |
|---|---|
CarUxRestrictionsManagerAPI publiques permettant de s'inscrire aux modifications des restrictions de l'expérience utilisateur. |
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictionsDéfinition des restrictions de l'expérience utilisateur. |
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
API système permettant de s'inscrire aux modifications de l'état de conduite. |
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Pour simuler des états de conduite, consultez la section Tests.