Avant de continuer, consultez les Consignes concernant les distractions au volant.
Cette page décrit les règles de restriction de l'expérience utilisateur (UX) pour les voitures que vous pouvez utiliser pour créer plusieurs configurations de règles de restriction 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 la section CarUxRestrictions.
Le service de restrictions relatives à l'expérience utilisateur dans la voiture permet aux développeurs de définir une nouvelle configuration de restrictions relatives à 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 persiste uniquement dans la nouvelle configuration. En d'autres termes, la configuration ne prend pas effet immédiatement. Au lieu de cela, la nouvelle configuration est chargée lorsque le service de restrictions UX redémarre et que la voiture est en mode Park. Le service de voiture s'assure que la voiture est en mode "Park" (P) avant de recharger la nouvelle configuration.
En plus de la nouvelle méthode de service UX Restrictions, 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. Position de stationnement.
- Au repos. La vitesse est nulle et la marche n'est pas en position "Park" (P).
- Déménagement. La vitesse n'est pas nulle et la marche n'est pas en position "P".
Pour savoir comment les applications consomment l'état de conduite d'une voiture et les restrictions d'expérience utilisateur correspondantes, consultez la section Consommer l'état de conduite d'une voiture et les restrictions d'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/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Véhicule à l'arrêt. Sans restriction.
- Au repos. Aucune vidéo ni aucun écran de configuration.
- Déménagement. Accès limité complètement (toutes les restrictions sont obligatoires).
La mise en correspondance illustrée ci-dessus est prédéterminée et configurée en tant que ressource XML. /packages/services/Car/+/main/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 d'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 port physique de l'écran. Les restrictions appropriées sont automatiquement appliquées à chaque écran. Dans l'exemple suivant, les écrans avec les ID de port physiques 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 choisir n'importe quel nom pour le mode, par exemple adolescent. Dans l'exemple suivant, différentes restrictions sont configurées pour les modes par défaut et passager (auparavant, seul le mode passager était pris en charge):
<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 deviez utiliser la méthode setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
dans CarUxRestrictionsManager).
API CarUxRestrictionsConfiguration
Restrictions avec CarUxRestrictionsConfiguration
La nouvelle classe CarUxRestrictionsConfiguration
est mappée en 1 à 1 sur le schéma de configuration XML actuel. CarUxRestrictionsConfiguration
peut être construit avec CarUxRestrictions.
, qui valide la configuration lors de la compilation (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 CarUxRestrictionsManager
Définissez CarUxRestrictionsConfiguration
pour le prochain lecteur avec CarUxRestrictionsManager
. Cette méthode nécessite une autorisation, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
Persister une nouvelle configuration des restrictions relatives à l'expérience utilisateur
Lorsqu'une nouvelle configuration est transmise, le service UX Restrictions renvoie une valeur booléenne pour indiquer si la nouvelle configuration a bien été enregistrée. Cette nouvelle configuration n'est utilisée que lorsque l'unité principale intégrée (IHU) 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 relatives à l'expérience utilisateur lit cette configuration au démarrage.
- Par étapes. Également facultative, cette configuration n'a aucun effet sur les restrictions d'expérience utilisateur et est promue en production lorsque le service de voiture démarre et lorsque la voiture est garée.
Figure 1 : Configuration de la version en production
Échecs d'adresse
Tant que les informations sur l'état de conduite ne sont pas reçues de CarPropertyManager (par exemple, au démarrage), les restrictions d'expérience utilisateur ne sont pas appliquées. Le système se comporte comme si l'état de conduite était "Garé".
Si la lecture d'une configuration enregistrée échoue (par exemple, en raison d'un résultat SettingNotFoundException), le service de restrictions d'interface utilisateur revient au mode entièrement restreint, codé en dur:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
État de conduite et restrictions pour les utilisateurs
Le contenu suivant décrit les interactions affichées dans le diagramme de conception suivant:
Figure 2. Interactions liées à 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 | Position |
---|---|
CarUxRestrictionsManager API publiques à enregistrer pour les modifications des restrictions d'expérience utilisateur. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictions Définition des restrictions relatives à l'expérience utilisateur. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
API système à enregistrer pour les changements d'état de conduite. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Pour simuler les états de conduite, consultez la section Tests.