Restrizioni relative all'esperienza utente dell'auto

Prima di continuare, consulta le linee guida sulle distrazioni alla guida.

In questa pagina vengono descritte le regole delle limitazioni relative all'esperienza utente dell'auto che puoi utilizzare per creare: più configurazioni di regole Limitazioni UX (ad esempio, Unione Europea o Giappone) e poi determinare quale insieme di regole applicare in fase di esecuzione. Per ulteriori informazioni, vedi CarUxRestrictions.

Il servizio Limitazioni UX auto consente agli sviluppatori di definire nuove restrizioni UX auto configurazione. Se uno sviluppatore vuole modificare le regole di limitazione (ad esempio per rispettare le standard di sicurezza), lo sviluppatore può utilizzare l'API per definire la nuova configurazione.

L'API per impostare la configurazione rimane solo nella nuova configurazione. In altre parole, la configurazione non ha effetto immediato. La nuova configurazione viene invece Caricato quando il servizio Limitazioni UX viene riavviato e l'auto è in modalità di parcheggio. Il servizio auto assicura che l'auto sia in modalità di parcheggio prima di ricaricare la nuova configurazione.

Oltre al nuovo metodo del servizio Limitazioni UX, vengono fornite API per creare configurazione. Lo stato di selezione delle marce e velocità viene convertito in uno dei tre stati di guida:

  • Parcheggiato. Attrezzatura al parco.
  • Inattività. L'ingranaggio non è in posizione di stazionamento e la velocità è zero.
  • Spostamento. L'ingranaggio non è in posizione di parcheggio e la velocità non è zero.

Per sapere come le app consumano lo stato di guida di un'auto e le relative limitazioni UX, consulta la sezione Informazioni sullo stato di guida e sulle limitazioni dell'UX.

Configurazione delle limitazioni in base agli stati delle unità

Per evitare che il conducente si distragga, Android mappa lo stato di guida a una serie di limitazioni UX. /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Parcheggiato. Senza restrizioni.
  • Inattività. Nessun video e nessuna schermata di configurazione.
  • Spostamento. Completamente limitato (sono necessarie tutte le restrizioni).

La mappatura illustrata sopra è predeterminata e configurata come risorsa XML. La /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java le regole vengono salvate in memoria. Il servizio quindi mappa l'attuale stato di guida alle limitazioni UX. e trasmette le restrizioni 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 alle visualizzazioni aggiuntive. Per creare la restrizione configurazioni per più display, includi il tag RestrictionMapping con fisicamente per il display. Le limitazioni appropriate vengono applicate automaticamente a ogni display. Nell'esempio seguente, i display con ID porta fisica 1 e 2 hanno diversi configurazioni:

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

Puoi selezionare un nome qualsiasi per la modalità, ad esempio adolescente. Nell'esempio seguente, vengono configurate limitazioni 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 un nome di stringa per la modalità. Ad esempio, Metodo setRestrictionMode(@NonNull String mode) in CarUxRestrictionsManager. (In precedenza, dovevi utilizzare Metodo setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) in CarUxRestrictionsManager.

API CarUxRestrictionsConfiguration

Limitazioni con CarUxRestrictionsConfiguration

La nuova classe CarUxRestrictionsConfiguration è mappata 1:1 al file XML corrente di configurazione del deployment. CarUxRestrictionsConfiguration può essere creato con CarUxRestrictions.Builder, che convalida la configurazione su 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

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

Mantieni una nuova configurazione delle limitazioni UX

Quando viene passata una nuova configurazione, il servizio Limitazioni UX 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) si riavvia e l'auto è parcheggiata. Internamente, le limitazioni relative all'esperienza utente contiene due set di configurazioni:

  • Produzione. Sebbene sia facoltativa, questa configurazione è spesso presente. UX Il servizio Restrizioni legge questa configurazione all'avvio.
  • Staging. Inoltre, questa configurazione è facoltativa e non influisce sulle limitazioni dell'esperienza utente e vengono promossi al canale di produzione all'avvio del servizio e quando l'auto viene parcheggiata.

Configurazione versione di produzione

Figura 1. Configurazione versione di produzione

Errori relativi agli indirizzi

Fino a quando CarPropertyManager non riceve le informazioni sullo stato di guida (ad esempio, durante l'avvio), le Limitazioni UX non verranno applicate. Il sistema funziona come se lo stato di guida fosse Parcheggiata.

Se la lettura di una configurazione salvata non riesce (ad esempio, i risultati di SettingNotFoundException), Il servizio Limitazioni UX torna alla modalità completamente con restrizioni hardcoded:

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

Stato di guida e limitazioni per gli utenti

Il seguente contenuto descrive le interazioni visualizzate nel seguente diagramma di progettazione:

Generazione delle interazioni con lo stato

Figura 2. Generazione delle interazioni con lo stato

Proprietà utilizzate per ricavare lo stato di guida

Utilizza i seguenti tre VehiclePropertyIds per ricavare 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 relative alle limitazioni UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Definizione delle limitazioni UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
API di sistema da registrare per determinare le modifiche dello stato.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Per simulare gli stati di guida, vedi Test.