Restrizioni relative all'esperienza utente dell'auto

Prima di continuare, consulta le linee guida sulla distrazione alla guida.

Questa pagina descrive le regole relative alle limitazioni dell'esperienza utente (UX) in auto che puoi utilizzare per creare più configurazioni di regole relative alle limitazioni dell'esperienza utente (ad esempio, Unione Europea e Giappone) e poi determinare quale insieme di regole applicare in fase di runtime. Per saperne di più, consulta CarUxRestrictions.

Il servizio Car UX Restrictions consente agli sviluppatori di definire una nuova configurazione di Car UX Restrictions. Se uno sviluppatore vuole modificare le regole di limitazione (ad esempio per rispettare gli standard di sicurezza locali), può utilizzare l'API per definire la nuova configurazione.

L'API per impostare la configurazione viene mantenuta solo nella nuova configurazione. In altre parole, la configurazione non ha effetto immediato. La nuova configurazione viene caricata quando il servizio Restrizioni UX viene riavviato e l'auto è parcheggiata. Il servizio auto assicura che l'auto sia parcheggiata prima di ricaricare la nuova configurazione.

Oltre al nuovo metodo di servizio UX Restrictions, vengono fornite API per creare la configurazione. Lo stato di selezione della marcia e della velocità viene convertito in uno dei tre stati di guida:

  • Parcheggiato. Marcia in posizione di parcheggio.
  • Al minimo. La marcia non è in posizione di parcheggio e la velocità è zero.
  • Trasloco. La marcia non è in posizione di parcheggio e la velocità non è zero.

Per scoprire come le app consumano lo stato di guida di un'auto e le relative limitazioni dell'esperienza utente, consulta Consumo dello stato di guida dell'auto e limitazioni dell'esperienza utente.

Configurazione delle limitazioni in base agli stati dell'auto

Per evitare distrazioni per il conducente, Android mappa lo stato di guida a un insieme di limitazioni UX /packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Parcheggiato. Senza limitazioni.
  • Al minimo. Nessun video e nessuna schermata di configurazione.
  • Trasloco. Completamente limitata (tutte le limitazioni sono obbligatorie).

Il mapping illustrato sopra è predeterminato e configurato come risorsa XML. Il /packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java salva quindi le regole in memoria. Il servizio esegue quindi il mapping dello stato di guida attuale alle limitazioni della UX e trasmette le limitazioni attuali all'intero 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>

Configurazioni per più display

Per impostazione predefinita, non vengono applicate limitazioni ai display aggiuntivi. Per creare configurazioni di limitazione per più display, includi il tag RestrictionMapping con la porta fisica per quel display. Le limitazioni appropriate vengono applicate automaticamente a ogni display. Nell'esempio seguente, i display con ID porta fisici 1 e 2 hanno configurazioni diverse:

<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>

Configurazioni per le modalità di restrizione

Puoi selezionare qualsiasi nome per la modalità, ad esempio adolescente. Nell'esempio seguente, sono configurate restrizioni diverse per le modalità predefinita e passeggero (in precedenza, era supportata solo la modalità passeggero):

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
Puoi utilizzare l'API per impostare qualsiasi nome di stringa per la modalità. Ad esempio, il metodo setRestrictionMode(@NonNull String mode) in CarUxRestrictionsManager. In precedenza, utilizzavi il metodo setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) in CarUxRestrictionsManager.

API CarUxRestrictionsConfiguration

Limitazioni con CarUxRestrictionsConfiguration

La nuova classe CarUxRestrictionsConfiguration è mappata 1:1 allo schema di configurazione XML corrente. CarUxRestrictionsConfiguration può essere costruito con CarUxRestrictions.Builder, che convalida la configurazione al momento della creazione.

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

Imposta CarUxRestrictionsConfiguration per il prossimo viaggio con CarUxRestrictionsManager. Questo metodo richiede l'autorizzazione Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Persistere una nuova configurazione delle limitazioni dell'esperienza utente

Quando viene trasmessa una nuova configurazione, il servizio UX Restrictions restituisce un valore booleano per indicare se la nuova configurazione è stata salvata correttamente. Questa nuova configurazione viene utilizzata solo quando l'unità principale integrata (IHU) viene riavviata e l'auto è parcheggiata. A livello interno, il servizio UX Restrictions contiene due set di configurazioni:

  • Produzione. Sebbene facoltativa, questa configurazione è spesso presente. Il servizio UX Restrictions legge questa configurazione all'avvio.
  • In preparazione. Facoltativa, questa configurazione non influisce sulle limitazioni dell'esperienza utente e viene promossa in produzione all'avvio del servizio auto e quando l'auto è parcheggiata.

Configurazione versione di produzione

Figura 1. Configurazione versione di produzione

Errori relativi all'indirizzo

Finché non vengono ricevute informazioni sullo stato di guida da CarPropertyManager (ad esempio, durante l'avvio), le limitazioni dell'esperienza utente non vengono applicate. Il sistema si comporta come se lo stato di guida fosse Parcheggiato.

Se la lettura di una configurazione salvata non va a buon fine (ad esempio, si verifica un errore SettingNotFoundException), il servizio UX Restrictions torna alla modalità hardcoded completamente limitata:

// Idling/moving state is fully restricted.
private static CarUxRestrictionsConfiguration generateDefaultConfig() {}

Stato di guida e limitazioni per gli utenti

I seguenti contenuti descrivono le interazioni mostrate nel seguente diagramma di progettazione:

Interazioni con lo stato Alla guida

Figura 2. Interazioni con lo stato Alla guida

Proprietà utilizzate per derivare lo stato di guida

Utilizza i seguenti tre VehiclePropertyIds per derivare lo stato di guida:

API disponibili per le app

Il codice si trova nelle seguenti posizioni:

Codice Posizione
CarUxRestrictionsManager
API pubbliche per registrarsi alle modifiche alle limitazioni UX.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Definizione delle limitazioni dell'esperienza utente.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
API di sistema per registrarsi alle modifiche dello stato di guida.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Per simulare gli stati di guida, vedi Test.