Limitazioni sull'esperienza dell'utente dell'auto

Prima di continuare, consulta le Linee guida sulle distrazioni di guida .

Questa pagina descrive le regole di Restrizioni Car User Experience (UX) che puoi utilizzare per creare più configurazioni di regole di Restrizioni UX (ad esempio, Unione Europea rispetto a Giappone) e quindi determinare quale set di regole applicare in fase di esecuzione. Per ulteriori informazioni, vedere CarUxRestrictions .

Il servizio Restrizioni Car UX consente agli sviluppatori di definire una nuova configurazione di Restrizioni Car UX. Se uno sviluppatore desidera modificare le regole di restrizione (ad esempio per conformarsi agli standard di sicurezza locali), può utilizzare l'API per definire la nuova configurazione.

L'API per impostare la configurazione persiste solo nella nuova configurazione. In altre parole, la configurazione non ha effetto immediato. La nuova configurazione viene invece caricata quando il servizio Restrizioni UX si riavvia e l'auto è in Park. Il servizio auto garantisce che l'auto sia in Park prima di ricaricare la nuova configurazione.

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

  • Parcheggiato. Ingranaggio nel parco.
  • Al minimo. Marcia non in posizione di parcheggio e velocità pari a zero.
  • In movimento. La marcia non è in Park e la velocità non è zero.

Per informazioni su come le app consumano lo stato di guida di un'auto e le corrispondenti restrizioni UX, consulta Consumo dello stato di guida dell'auto e restrizioni UX .

Configurazione delle restrizioni in base agli stati del drive

Per prevenire la distrazione del conducente, Android mappa lo stato di guida su una serie di restrizioni UX /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Parcheggiato. Senza restrizioni.
  • Al minimo. Nessun video e nessuna schermata di configurazione.
  • In movimento. Completamente limitato (tutte le restrizioni sono richieste).

La mappatura illustrata sopra è predeterminata e configurata come risorsa XML. IL /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java salva quindi le regole in memoria. Il servizio quindi mappa lo stato di guida attuale sulle restrizioni 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 viene applicata alcuna restrizione ai display aggiuntivi. Per creare configurazioni di restrizione per più display, includere il tag RestrictionMapping con la PhysicalPort per quel display. Le restrizioni appropriate vengono applicate automaticamente a ciascun 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

È possibile selezionare qualsiasi nome per la modalità, ad esempio teenager . Nell'esempio seguente, sono configurate diverse restrizioni per la modalità predefinita e per quella 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>
È possibile utilizzare l'API per impostare qualsiasi nome di stringa per la modalità. Ad esempio, il metodo setRestrictionMode(@NonNull String mode) in CarUxRestrictionsManager. (In precedenza, avresti utilizzato il metodo setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) in CarUxRestrictionsManager).

API di configurazione CarUxRestrictions

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

Mantenere una nuova configurazione delle restrizioni UX

Quando viene passata una nuova configurazione, il servizio Restrizioni 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, il servizio Restrizioni UX contiene due serie di configurazioni:

  • Produzione. Sebbene facoltativa, questa configurazione è spesso presente. Il servizio Restrizioni UX legge questa configurazione all'avvio.
  • In scena. Anch'essa facoltativa, questa configurazione non ha alcun effetto sulle restrizioni UX e viene promossa a Produzione quando inizia il servizio auto e quando l'auto viene parcheggiata.

Configurazione della produzione

Figura 1. Configurazione di produzione

Affrontare i fallimenti

Finché CarPropertyManager non riceve le informazioni sullo stato di guida (ad esempio durante l'avvio), le restrizioni UX non verranno applicate. Il sistema funziona come se lo stato di guida fosse Parcheggiato.

Se la lettura di una configurazione salvata non riesce (ad esempio, risultati di SettingNotFoundException), il servizio Restrizioni UX torna alla modalità hardcoded e completamente limitata:

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

Stato di guida e restrizioni per l'utente

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

Guidare le interazioni tra stati

Figura 2. Interazioni tra stati determinanti

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 risiede nelle seguenti posizioni:

Codice Posizione
CarUxRestrictionsManager
API pubbliche per registrarsi per le modifiche alle restrizioni UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Definizione delle restrizioni UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
API di sistema per registrarsi per guidare i cambiamenti di stato.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Per simulare gli stati di guida, vedere Test .