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