Avant de continuer, consultez les Consignes concernant les problèmes de distraction au volant.
Cette page décrit les règles liées aux restrictions liées à l'expérience utilisateur du véhicule (UX) que vous pouvez utiliser pour créer plusieurs configurations de règles de restrictions de l'expérience utilisateur (par exemple, Union européenne contre Japon), puis déterminer quel ensemble de règles appliquer lors de l'exécution. Pour en savoir plus, consultez CarUxRestrictions.
Le service Restrictions de l'expérience utilisateur des voitures permet aux développeurs de définir de nouvelles restrictions de l'expérience utilisateur pour les voitures. configuration. Si un développeur souhaite modifier les règles de restriction (pour respecter, par exemple, de sécurité), le développeur 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. Autrement dit, la configuration ne prend pas effet immédiatement. La nouvelle configuration chargé lorsque le service de restrictions relatives à l'expérience utilisateur redémarre et que la voiture est à l'arrêt. L'entretien automobile s'assure que la voiture est à l'arrêt avant d'actualiser 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 configuration. L'état de sélection des vitesses et la vitesse sont convertis dans l'un des trois états de conduite:
- À l'arrêt. Équipement à l'arrêt.
- Inactif. La vitesse n'est pas à l'arrêt et la vitesse est nulle.
- En mouvement. L'équipement n'est pas à l'arrêt et la vitesse n'est pas nulle.
Pour savoir comment les applis consomment l'état de conduite d'une voiture et les restrictions de l'expérience utilisateur correspondantes, consultez la section Consommation d'état de conduite de la voiture et de restrictions de l'expérience utilisateur.
Configuration des restrictions en fonction des états des disques
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
- À l'arrêt. Il n'y a aucune restriction.
- Inactif. Pas de vidéo ni d'écran de configuration.
- En mouvement. Accès limité (toutes les restrictions sont obligatoires)
Le mappage illustré ci-dessus est prédéterminé et configuré en tant que ressource XML. La
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
puis enregistre 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 une restriction
pour plusieurs écrans, ajoutez la balise RestrictionMapping
avec le paramètre
physiquePort pour cet écran. Les restrictions appropriées sont automatiquement appliquées
l'écran. Dans l'exemple suivant, les écrans avec les ID de ports physiques 1 et 2 ont des valeurs différentes
Configurations:
<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 ce mode, par exemple Adolescent. Dans l'exemple suivant, différentes restrictions sont configurées pour les modes default (par défaut) et passenger (auparavant, seul le mode passenger était accepté):
<DrivingState car:state="idling"> <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/> </DrivingState> </Restrictions>Vous pouvez utiliser l'API pour définir n'importe quel nom de chaîne pour le mode. Par exemple, le paramètre Méthode
setRestrictionMode(@NonNull String mode)
dans CarUxRestrictionsManager.
(Auparavant, vous utilisiez la fonction
Méthode setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
dans
CarUxRestrictionsManager).
API CarUxRestrictionsConfiguration
Restrictions avec CarUxRestrictionsConfiguration
La nouvelle classe CarUxRestrictionsConfiguration
est mappée au format 1:1 avec le code XML actuel.
schéma de configuration standard. CarUxRestrictionsConfiguration
peut être créé avec CarUxRestrictions.
, ce qui valide la configuration
après 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 trajet avec CarUxRestrictionsManager
. Cette méthode nécessite une autorisation,
Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
Conserver 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 pour indiquer si la nouvelle configuration a bien été enregistrée. Cette nouvelle configuration n'est utilisée l'unité principale intégrée (IHU) redémarre et la voiture est à l'arrêt. En interne, les restrictions relatives à l'expérience utilisateur contient deux ensembles de configurations:
- Production : Bien que facultative, cette configuration est souvent présente. Expérience utilisateur Le service de restrictions lit cette configuration au démarrage.
- En préproduction. Également facultative, cette configuration n'a aucun effet sur les restrictions de l'expérience utilisateur Il est promu en production au démarrage du service automobile et lorsque 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 la conduite ne sont pas reçues de CarPropertyManager (par exemple, pendant au démarrage), les restrictions relatives à l'expérience utilisateur ne seront pas appliquées. Le système fonctionne comme si l'état de conduite était À l'arrêt.
Si la lecture d'une configuration enregistrée échoue (par exemple, les résultats de "SettingNotFoundException"), la Le service de restrictions de l'expérience utilisateur revient au mode restreint entièrement codé en dur:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
État du trajet et restrictions utilisateur
Le contenu suivant décrit les interactions affichées dans le diagramme de conception suivant:
Figure 2. Interactions avec l'état de conduite
Propriétés utilisées pour déterminer l'état de conduite
Utilisez les trois VehiclePropertyIds
suivants pour obtenir l'état de conduite:
API disponibles pour les applications
Le code se trouve aux emplacements suivants:
Code | Position |
---|---|
CarUxRestrictionsManager
API publiques permettant de s'inscrire aux modifications des restrictions de l'expérience utilisateur.
|
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictions
Définition des restrictions de l’expérience utilisateur.
|
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
API système permettant d'enregistrer les changements d'état de la conduite. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Pour simuler des états de conduite, consultez Tests :