Prima di continuare, consulta le linee guida sulla distrazione alla guida.
Questa pagina descrive le regole di limitazioni dell'esperienza utente (UX) dell'auto che puoi utilizzare per creare più configurazioni di regole di limitazioni dell'esperienza utente (ad es. Unione Europea e Giappone) e poi determinare quale insieme di regole applicare in fase di esecuzione. Per ulteriori informazioni, consulta CarUxRestrictions.
Il servizio Limitazioni dell'esperienza utente per auto consente agli sviluppatori di definire una nuova configurazione di queste limitazioni. 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 diventa effettiva immediatamente. La nuova configurazione viene invece caricata quando il servizio Restrizioni UX si riavvia e l'auto è in Parcheggio. Il servizio auto si assicura che l'auto sia in P prima di ricaricare la nuova configurazione.
Oltre al nuovo metodo del servizio UX Restrictions, 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:
- Parcheggiato. Cambio in P.
- Inutilizzata. La marcia non è in Parcheggio e la velocità è zero.
- Trasloco. La marcia non è in Parcheggio e la velocità non è zero.
Per scoprire in che modo le app consumano lo stato di guida di un'auto e le relative limitazioni UX, consulta Consumo dello stato di guida dell'auto e limitazioni UX.
Configurazione delle restrizioni in base agli stati del viaggio
Per evitare distrazioni al conducente, Android mappa lo stato di guida a un insieme di limitazioni UX
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Parcheggiato. Senza restrizioni.
- Inutilizzata. Nessun video e nessuna schermata di configurazione.
- Trasloco. Completamente limitata (sono obbligatorie tutte le limitazioni).
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 mappa quindi lo stato di guida attuale alle limitazioni 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 limitazioni per più display, includi il tag RestrictionMapping
con la porta fisica per il display in questione. Le limitazioni appropriate vengono applicate automaticamente a ogni
dispositivo. 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à con restrizioni
Puoi selezionare un nome qualsiasi per la modalità, ad esempio adolescente. Nell'esempio seguente, sono 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>
setRestrictionMode(@NonNull String mode)
in CarUxRestrictionsManager.
In precedenza, utilizzavi il metodo setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
in CarUxRestrictionsManager.
API CarUxRestrictionsConfiguration
Restrizioni 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 compilazione().
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'autorizzazioneCar.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
Mantenere una nuova configurazione delle limitazioni dell'esperienza utente
Quando viene passata 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) si riavvia e l'auto è parcheggiata. All'interno, il servizio UX Restrictions contiene due insiemi di configurazioni:
- Produzione. Sebbene facoltativa, questa configurazione è spesso presente. Il servizio UX Restrictions legge questa configurazione all'avvio.
- Pianificata. Anche se facoltativa, questa configurazione non influisce sulle limitazioni UX e viene promossa in produzione quando il servizio dell'auto si avvia e quando l'auto è parcheggiata.
Figura 1. Configurazione versione di produzione
Errori di indirizzo
Finché le informazioni sullo stato di guida non vengono ricevute da CarPropertyManager (ad esempio durante il avvio), le limitazioni UX non verranno 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, i risultati di SettingNotFoundException), il servizio UX Restrictions passa alla modalità completamente limitata hardcoded:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Stato di guida e limitazioni per gli utenti
I seguenti contenuti descrivono le interazioni visualizzate nel seguente diagramma di progettazione:
Figura 2. Interazioni con lo stato Alla guida
Proprietà utilizzate per dedurre lo stato di guida
Utilizza i seguenti tre VehiclePropertyIds
per dedurre lo stato di guida:
API disponibili per le app
Il codice si trova nelle seguenti posizioni:
Codice | Posizione |
---|---|
CarUxRestrictionsManager API pubbliche da registrare per le modifiche alle limitazioni UX. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictions Definizione delle limitazioni dell'esperienza utente. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
API di sistema per registrarsi alle modifiche dello stato Alla guida. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Per simulare gli stati di guida, vedi Test.