Einschränkungen bei der Nutzung von Fahrzeugen

Bevor Sie fortfahren, lesen Sie sich die Richtlinien zur Ablenkung beim Fahren durch.

Auf dieser Seite werden die Car User Experience (UX)-Einschränkungsregeln beschrieben, mit denen Sie mehrere Regelkonfigurationen für UX-Einschränkungen erstellen können (z. B. Europäische Union im Vergleich zu Japan) und dann bestimmen können, welcher Regelsatz zur Laufzeit angewendet werden soll. Weitere Informationen finden Sie unter CarUxRestrictions .

Mit dem Dienst „Car UX Restrictions“ können Entwickler eine neue Car UX Restrictions-Konfiguration definieren. Sollte ein Entwickler die Beschränkungsregeln ändern wollen (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 Restrictions-Dienst neu gestartet wird und das Auto im Parkmodus ist. Der Autoservice stellt sicher, dass sich das Auto im Parkzustand befindet, bevor die neue Konfiguration neu geladen wird.

Zusätzlich zur neuen Dienstmethode „UX Restrictions“ werden APIs zum Erstellen der Konfiguration bereitgestellt. 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 ist Null.
  • Ziehen um. Der Gang ist nicht im Parkmodus und die Geschwindigkeit ist nicht Null.

Informationen dazu, wie Apps den Fahrzustand eines Autos nutzen und welche UX-Einschränkungen es gibt, finden Sie unter „Nutzung des Fahrzustands eines Autos und UX-Einschränkungen“ .

Einschränkungskonfiguration basierend auf Laufwerkszuständen

Um eine Ablenkung des Fahrers zu verhindern, ordnet Android den Fahrzustand einer Reihe von UX-Einschränkungen zu /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Geparkt. Uneingeschränkt.
  • Leerlauf. Kein Video und kein Konfigurationsbildschirm.
  • Ziehen um. Vollständig eingeschränkt (alle Einschränkungen sind erforderlich).

Die oben dargestellte Zuordnung ist als XML-Ressource vorab festgelegt und konfiguriert. Der /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java speichert dann die Regeln im Speicher. Der Dienst ordnet dann den aktuellen Fahrstatus den UX-Einschränkungen zu 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 Einschränkungskonfigurationen für mehrere Anzeigen zu erstellen, fügen Sie das RestrictionMapping Tag mit dem physischen Port für diese Anzeige ein. Die entsprechenden Einschrä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 einen beliebigen Namen für den Modus auswählen, beispielsweise „teen“ . Im folgenden Beispiel werden unterschiedliche Einschränkungen für den Standard- und den Passagiermodus konfiguriert (zuvor 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. Zum Beispiel 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 mit 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 die nächste Fahrt mit CarUxRestrictionsManager fest. Für diese Methode ist die Berechtigung Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION erforderlich.

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Behalten Sie eine neue UX-Einschränkungskonfiguration bei

Wenn eine neue Konfiguration übergeben wird, gibt der UX Restrictions-Dienst 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 startet und das Auto geparkt ist. Intern enthält der UX Restrictions-Dienst zwei Konfigurationssätze:

  • Produktion. Obwohl diese Konfiguration optional ist, ist sie häufig vorhanden. Der UX Restrictions-Dienst liest diese Konfiguration beim Start.
  • Inszeniert. Diese Konfiguration ist ebenfalls optional und hat keine Auswirkung auf UX-Einschränkungen. Sie wird in die Produktion hochgestuft, wenn der Autoservice startet und das Auto geparkt wird.

Produktionskonfiguration

Abbildung 1. Produktionskonfiguration

Beheben Sie Fehler

Bis Fahrzustandsinformationen von CarPropertyManager empfangen werden (z. B. beim Hochfahren), werden UX-Einschränkungen nicht erzwungen. Das System verhält sich so, als ob der Fahrzustand „Parken“ wäre.

Sollte das Lesen einer gespeicherten Konfiguration fehlschlagen (z. B. SettingNotFoundException-Ergebnisse), greift der UX Restrictions-Dienst auf den hartcodierten, vollständig eingeschränkten Modus zurück:

// Idling/moving state is fully restricted.
private static CarUxRestrictionsConfiguration generateDefaultConfig() {}

Fahrzustands- und Benutzerbeschränkungen

Der folgende Inhalt beschreibt die Interaktionen, die im folgenden Designdiagramm angezeigt werden:

Zustandsinteraktionen vorantreiben

Abbildung 2. Antriebszustandsinteraktionen

Eigenschaften, die zum Ableiten des Fahrzustands verwendet werden

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 Standort
CarUxRestrictionsManager
Öffentliche APIs zur Registrierung für UX-Einschränkungsänderungen.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Definition der UX-Einschränkungen.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
System-APIs zur Registrierung, um Zustandsänderungen voranzutreiben.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Informationen zum Simulieren von Fahrzuständen finden Sie unter Testen .