Prima di continuare, consulta le Linee guida per evitare distrazioni alla guida.
Questa pagina descrive le regole delle limitazioni dell'esperienza utente (UX) in auto che puoi utilizzare per creare più configurazioni di regole di limitazione dell'esperienza utente (ad esempio, Unione Europea e Giappone) e poi determinare quale insieme di regole applicare in fase di runtime. Per ulteriori informazioni, vedi CarUxRestrictions.
Il servizio Limitazioni dell'esperienza utente in auto consente agli sviluppatori di definire una nuova configurazione di limitazioni dell'esperienza utente in auto. 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 persiste solo nella nuova configurazione. In altre parole, la configurazione non ha effetto immediatamente. La nuova configurazione viene caricata quando il servizio Limitazioni dell'esperienza utente viene riavviato e l'auto è parcheggiata. Il servizio auto si assicura che l'auto sia parcheggiata prima di ricaricare la nuova configurazione.
Oltre al nuovo metodo del servizio Limitazioni dell'esperienza utente, vengono fornite API per creare la configurazione. Lo stato della selezione della marcia e della velocità viene convertito in uno dei tre stati di guida:
- Parcheggiata. Marcia in posizione di parcheggio.
- Al minimo. Marcia non in posizione di parcheggio e velocità pari a zero.
- In movimento. Marcia non in posizione di parcheggio e velocità diversa da zero.
Per scoprire in che modo le app consumano lo stato di guida di un'auto e le limitazioni dell'esperienza utente corrispondenti, vedi Consumare lo stato di guida dell'auto e le limitazioni dell'esperienza utente.
Configurazione delle limitazioni in base agli stati di guida
Per evitare distrazioni alla guida, Android mappa lo stato di guida a un insieme di limitazioni dell'esperienza utente
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Parcheggiata. Senza limitazioni.
- Al minimo. Nessun video e nessuna schermata di configurazione.
- In movimento. Completamente limitata (tutte le limitazioni sono obbligatorie).
La mappatura illustrata sopra è predeterminata e configurata come risorsa XML.
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
salva le regole in memoria. Il servizio mappa quindi lo stato di guida attuale alle limitazioni dell'esperienza utente 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 limitazioni per più display, includi il tag RestrictionMapping con physicalPort per quel display. Le limitazioni appropriate vengono applicate automaticamente a ogni display. Nell'esempio seguente, i display con ID porta fisica 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 limitazione
Puoi selezionare qualsiasi nome per la modalità, ad esempio teen. Nell'esempio seguente, vengono configurate limitazioni diverse per le modalità default e passenger (in precedenza era supportata solo la modalità passenger):
<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, avresti utilizzato 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 creata 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 la prossima guida con CarUxRestrictionsManager. Questo metodo richiede l'autorizzazione Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
CarUxRestrictionsConfiguration config);Persistere una nuova configurazione di limitazioni dell'esperienza utente
Quando viene passata una nuova configurazione, il servizio Limitazioni dell'esperienza utente 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. Internamente, il servizio Limitazioni dell'esperienza utente contiene due insiemi di configurazioni:
- Produzione. Sebbene sia facoltativa, questa configurazione è spesso presente. Il servizio Limitazioni dell'esperienza utente legge questa configurazione all'avvio.
- Graduale. Anche questa configurazione è facoltativa, non ha alcun effetto sulle limitazioni dell'esperienza utente e viene promossa alla produzione quando il servizio auto viene avviato e l'auto è parcheggiata.

Figura 1. Configurazione versione di produzione
Risolvere gli errori
Finché non vengono ricevute informazioni sullo stato di guida da CarPropertyManager (ad esempio, durante l'avvio), le limitazioni dell'esperienza utente non verranno applicate. Il sistema si comporta come se lo stato di guida fosse Parcheggiata.
Se la lettura di una configurazione salvata non riesce (ad esempio, si verificano risultati SettingNotFoundException), il servizio Limitazioni dell'esperienza utente torna alla modalità completamente limitata codificata:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Stato di guida e limitazioni utente
I seguenti contenuti descrivono le interazioni visualizzate nel seguente diagramma di progettazione:

Figura 2. Interazioni dello stato di 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 | Località |
|---|---|
CarUxRestrictionsManagerAPI pubbliche per registrarsi per le modifiche delle limitazioni dell'esperienza utente. |
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictionsDefinizione delle limitazioni dell'esperienza utente. |
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
API di sistema per registrarsi per le modifiche dello stato di guida. |
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Per simulare gli stati di guida, vedi Test.