Restrictions liées à l'expérience utilisateur de la voiture

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.Builder, 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.

Configuration de la version en production

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:

Interactions avec l&#39;état de conduite

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 :