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

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:

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 |
|---|---|
CarUxRestrictionsManagerAPI pubbliche per registrarsi alle modifiche alle limitazioni UX. |
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictionsDefinizione 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.