Lesen Sie sich zuerst die Richtlinien zu Ablenkungen beim Autofahren durch.
Auf dieser Seite werden die Einschränkungen für die Nutzerfreundlichkeit von Autos (User Experience, UX) beschrieben. Mit diesen Einschränkungen können Sie mehrere Konfigurationen von UX-Einschränkungsregeln erstellen (z. B. für die Europäische Union und Japan) und dann festlegen, welche Regeln zur Laufzeit angewendet werden sollen. Weitere Informationen finden Sie unter CarUxRestrictions.
Mit dem Dienst „UX-Einschränkungen für Autos“ können Entwickler eine neue Konfiguration für UX-Einschränkungen für Autos definieren. Wenn ein Entwickler die Einschränkungsregeln ändern möchte (z. B. um lokale Sicherheitsstandards einzuhalten), kann er die neue Konfiguration über die API definieren.
Die API zum Festlegen der Konfiguration bleibt nur in der neuen Konfiguration erhalten. Mit anderen Worten: Die Konfiguration tritt nicht sofort in Kraft. Stattdessen wird die neue Konfiguration geladen, wenn der Dienst für UX-Einschränkungen neu gestartet wird und das Auto in Park steht. Der Autoservice sorgt dafür, dass das Auto in Park steht, bevor die neue Konfiguration neu geladen wird.
Neben der neuen Dienstmethode für UX-Einschränkungen werden APIs zum Erstellen der Konfiguration bereitgestellt. Der Status der Gangwahl und der Geschwindigkeit wird in einen der drei Fahrzustände umgewandelt:
- Geparkt Der Gang ist auf „Parken“ gestellt.
- Inaktivität Der Gang ist nicht auf „Parken“ gestellt und die Geschwindigkeit ist null.
- Umzug Der Gang ist nicht auf „Parken“ gestellt und die Geschwindigkeit ist nicht null.
Informationen dazu, wie Apps den Fahrstatus eines Autos nutzen und welche UX-Einschränkungen damit verbunden sind, finden Sie unter Fahrstatus eines Autos nutzen und UX-Einschränkungen.
Konfiguration von Einschränkungen basierend auf Laufwerksstatus
Um Ablenkungen des Fahrers zu vermeiden, ordnet Android den Fahrstatus einer Reihe von UX-Einschränkungen zu.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Geparkt Uneingeschränkt.
- Inaktivität Kein Video und kein Konfigurationsbildschirm.
- Umzug Vollständig eingeschränkt (alle Einschränkungen sind erforderlich).
Die oben dargestellte Zuordnung ist vordefiniert und als XML-Ressource konfiguriert. Die /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
speichert die Regeln dann im Arbeitsspeicher. Der Dienst ordnet dann den aktuellen Fahrstatus den UX-Einschränkungen zu und überträgt 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 für zusätzliche Displays keine Einschränkungen. Wenn Sie Konfigurationen für Einschränkungen für mehrere Displays erstellen möchten, fügen Sie das RestrictionMapping
-Tag mit dem physischen Anschluss für das jeweilige Display ein. Die entsprechenden Einschränkungen werden automatisch auf jedes Display 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 einen beliebigen Namen für den Modus auswählen, z. B. Teenager. Im folgenden Beispiel sind für die Modi default und passenger unterschiedliche Einschränkungen konfiguriert. Bisher wurde nur der Modus passenger 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>
setRestrictionMode(@NonNull String mode)
in CarUxRestrictionsManager.
Bisher wurde die Methode setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
in CarUxRestrictionsManager verwendet.
CarUxRestrictionsConfiguration APIs
Einschränkungen bei CarUxRestrictionsConfiguration
Die neue Klasse CarUxRestrictionsConfiguration
wird 1:1 dem aktuellen XML-Konfigurationsschema zugeordnet. CarUxRestrictionsConfiguration
kann mit CarUxRestrictions.
erstellt werden, wodurch die Konfiguration bei build() validiert wird.
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
fest. Für diese Methode ist die Berechtigung Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
erforderlich.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
Neue Konfiguration für UX-Einschränkungen beibehalten
Wenn eine neue Konfiguration übergeben wird, gibt der Dienst für UX-Einschränkungen einen booleschen Wert zurück, der angibt, ob die neue Konfiguration erfolgreich gespeichert wurde. Diese neue Konfiguration wird nur verwendet, wenn die integrierte Headunit (IHU) neu gestartet wird und das Auto parkt. Intern enthält der Dienst „UX-Einschränkungen“ zwei Konfigurationsgruppen:
- Produktion: Diese Konfiguration ist optional, wird aber häufig verwendet. Der Dienst „UX-Einschränkungen“ liest diese Konfiguration beim Starten.
- Phasenweise Diese Konfiguration ist optional und hat keine Auswirkungen auf UX-Einschränkungen. Sie wird in die Produktionsversion übernommen, wenn der Autoservice gestartet wird und das Auto geparkt ist.
Abbildung 1: Konfiguration des Produktions-Tracks
Adressfehler
Solange keine Informationen zum Fahrstatus vom CarPropertyManager empfangen werden (z. B. beim Starten), werden die UX-Einschränkungen nicht erzwungen. Das System verhält sich so, als wäre der Fahrstatus „Geparkt“.
Wenn das Lesen einer gespeicherten Konfiguration fehlschlägt (z. B. SettingNotFoundException), wechselt der Dienst für UX-Einschränkungen zum hartcodierten, vollständig eingeschränkten Modus:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Fahrstatus und Nutzereinschränkungen
Im Folgenden werden die Interaktionen beschrieben, die im folgenden Designdiagramm dargestellt sind:
Abbildung 2: Interaktionen mit dem Fahrzustand
Properties, die zum Ableiten des Fahrstatus verwendet werden
Verwenden Sie die folgenden drei VehiclePropertyIds
, um den Fahrstatus abzuleiten:
Für Apps verfügbare APIs
Der Code befindet sich an den folgenden Speicherorten:
Code | Standort |
---|---|
CarUxRestrictionsManager Öffentliche APIs, die für Änderungen an den UX-Einschränkungen registriert werden müssen. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictions Definition von UX-Einschränkungen. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
System-APIs, die für Änderungen des Fahrzustands registriert werden müssen. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Informationen zum Simulieren von Fahrzuständen finden Sie unter Tests.