Bevor Sie fortfahren, lesen Sie die Richtlinien zur Ablenkung beim Fahren .
In diesem Artikel werden die Beschränkungsregeln für die Benutzererfahrung im Auto (UX) beschrieben, die Sie verwenden können, um mehrere UX-Einschränkungsregelkonfigurationen zu erstellen (z. B. Europäische Union oder Japan) und dann zu bestimmen, welcher Regelsatz zur Laufzeit angewendet werden soll. Weitere Informationen finden Sie unter CarUxRestrictions .
Der Dienst Car UX Restrictions ermöglicht Entwicklern, eine neue Konfiguration für Car UX Restrictions zu definieren. Wenn ein Entwickler die Beschränkungsregeln ändern möchte (z. B. um lokale Sicherheitsstandards einzuhalten), kann der Entwickler die API verwenden, um die neue Konfiguration zu definieren.
Die API zum Festlegen der Konfiguration bleibt nur in der neuen Konfiguration bestehen. Mit anderen Worten, die Konfiguration wird nicht sofort wirksam. Stattdessen wird die neue Konfiguration geladen, wenn der UX-Einschränkungsdienst neu gestartet wird und sich das Auto in Park befindet. Der Autoservice stellt sicher, dass sich das Auto in Park befindet, bevor die neue Konfiguration neu geladen wird.
Zusätzlich zur neuen Dienstmethode UX-Einschränkungen werden APIs bereitgestellt, um die Konfiguration zu erstellen. Der Zustand der Gangwahl und Geschwindigkeit wird in einen von drei Fahrzuständen umgewandelt:
- Geparkt . Ausrüstung im Park.
- Leerlauf . Gang nicht in Parkstellung und Geschwindigkeit Null.
- Bewegen . Gang nicht in Parkstellung und Geschwindigkeit nicht Null.
Um zu erfahren, wie Anwendungen den Fahrzustand eines Autos und die entsprechenden UX-Einschränkungen verbrauchen, siehe Nutzung des Autofahrzustands und UX-Einschränkungen .
Beschränkungskonfiguration basierend auf Laufwerkszuständen
Um eine Ablenkung des Fahrers zu verhindern, ordnet Android den Fahrzustand einem Satz von UX-Einschränkungsregeln (UX Restriction) zu (eine Liste der Einschränkungen finden Sie unter attrs.xml ). Betrachten Sie diese Beispielregeln:
- Geparkt . Uneingeschränkt.
- Leerlauf . Kein Video und kein Konfigurationsbildschirm.
- Bewegen . Vollständig eingeschränkt (alle Einschränkungen sind erforderlich).
Die oben dargestellte Zuordnung ist vorab festgelegt und als XML-Ressource konfiguriert. Die Konfiguration wird in car_ux_restrictions_map aufgezeichnet. Intern analysiert der CarUxRestrictionsManagerService die Regeln während der Initialisierung und speichert die Regeln dann im Arbeitsspeicher. Der Dienst bildet dann den aktuellen Fahrzustand auf UX-Einschränkungen ab und sendet die aktuellen Einschränkungen an das gesamte System.
<!-- 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>
Konfigurationen für mehrere Displays
Standardmäßig gelten keine Einschränkungen für zusätzliche Anzeigen. Um Beschränkungskonfigurationen für mehrere Displays zu erstellen, schließen Sie das RestrictionMapping
-Tag mit dem physischen Port für dieses Display ein. Die entsprechenden Beschränkungen werden automatisch auf jede Anzeige angewendet. Im folgenden Beispiel haben die Displays mit den physischen Port-IDs 1 und 2 unterschiedliche Konfigurationen:
<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>
Konfigurationen für Einschränkungsmodi
Sie können jetzt einen beliebigen Namen für den Modus auswählen, z. B. Teenager . Im folgenden Beispiel werden unterschiedliche Einschränkungen für den Standard- und den Passagiermodus konfiguriert (bisher wurde nur der Passagiermodus unterstützt):
<DrivingState car:state="idling"> <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/> </DrivingState> </Restrictions>Sie können die API verwenden, um einen beliebigen Zeichenfolgennamen für den Modus festzulegen. Beispielsweise die Methode
setRestrictionMode(@NonNull String mode)
in CarUxRestrictionsManager. (Früher haben Sie die Methode setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
in CarUxRestrictionsManager verwendet).CarUxRestrictionsConfiguration-APIs
Einschränkungen bei CarUxRestrictionsConfiguration
Die neue Klasse CarUxRestrictionsConfiguration
wird 1:1 auf das aktuelle XML-Konfigurationsschema abgebildet. CarUxRestrictionsConfiguration
kann mit CarUxRestrictions. Builder
, der die Konfiguration bei build() validiert.
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();
CarUxRestrictionsManager-API
Legen Sie CarUxRestrictionsConfiguration
für das nächste Laufwerk mit CarUxRestrictionsManager
. Diese Methode erfordert die Berechtigung Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
Behalten Sie eine neue UX-Einschränkungskonfiguration bei
Wenn eine neue Konfiguration übergeben wird, gibt der UX-Einschränkungsdienst einen booleschen Wert zurück, um anzugeben, ob die neue Konfiguration erfolgreich gespeichert wurde. Diese neue Konfiguration wird nur verwendet, wenn die Integrated Head Unit (IHU) neu gestartet wird und das Auto geparkt ist. Intern enthält der UX-Einschränkungsdienst zwei Konfigurationssätze:
- Produktion . Obwohl optional, ist diese Konfiguration oft vorhanden. Der Dienst UX Restrictions liest diese Konfiguration beim Start.
- Inszeniert . Diese ebenfalls optionale Konfiguration hat keine Auswirkungen auf UX-Einschränkungen und wird in die Produktion hochgestuft, wenn der Autodienst beginnt und das Auto geparkt wird.
Abbildung 1. Produktionskonfiguration
Adressfehler
Bis Fahrzustandsinformationen von CarPropertyManager empfangen werden (z. B. während des Hochfahrens), werden UX-Einschränkungen nicht erzwungen. Das System verhält sich so, als wäre der Fahrzustand geparkt.
Sollte das Lesen einer gespeicherten Konfiguration fehlschlagen (z. B. Ergebnis von SettingNotFoundException), fällt der UX-Restriktionsdienst auf den fest codierten, vollständig eingeschränkten Modus zurück:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Fahrzustand und Benutzerbeschränkungen
Der folgende Inhalt beschreibt die Interaktionen, die im folgenden Konstruktionsdiagramm dargestellt werden:
Abbildung 2. Interaktionen des Fahrzustands
Zum Ableiten des Fahrzustands verwendete Eigenschaften
Verwenden Sie die folgenden drei VehiclePropertyIds
, um den Fahrzustand abzuleiten:
Für Apps verfügbare APIs
Der Code befindet sich an den folgenden Orten:
Code | Ort |
---|---|
CarUxRestrictionsManager Öffentliche APIs zur Registrierung für Änderungen der UX-Einschränkung. | /packages/services/Car/+/master/car-lib/src/android/car/drivingstate/CarUxRestrictionsManager.java |
CarUxRestrictions Definition von UX-Einschränkungen. | /packages/services/Car/+/master/car-lib/src/android/car/drivingstate/CarUxRestrictions.java |
CarDrivingStateManager System-APIs zur Registrierung für Fahrzustandsänderungen. | /packages/services/Car/+/master/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
Um Fahrzustände zu simulieren, siehe Testen .