Einschränkungen für die Autonutzung

Lesen Sie zuerst die Richtlinien zu Ablenkungen für Fahrer.

Auf dieser Seite werden die Regeln für die Einschränkungen der Car User Experience (UX) beschrieben, mit denen Sie mehrere Regelkonfigurationen für UX-Einschränkungen erstellen können (z. B. für die Europäische Union und für Japan). Anschließend können Sie festlegen, welche Regeln zur Laufzeit angewendet werden sollen. Weitere Informationen finden Sie unter CarUxRestrictions.

Mit dem Dienst „Car UX Restrictions“ 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 API verwenden, um die neue Konfiguration zu definieren.

Die API zum Festlegen der Konfiguration ist nur in der neuen Konfiguration verfügbar. Mit anderen Worten: Die Konfiguration wird nicht sofort wirksam. Stattdessen wird die neue Konfiguration geladen, wenn der Dienst „UX Restrictions“ neu gestartet wird und das Auto geparkt ist. Der Autoservice sorgt dafür, dass das Auto geparkt ist, 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 der Geschwindigkeit wird in einen von drei Fahrzuständen umgewandelt:

  • Geparkt: Gang im Park.
  • Leerlauf: Der Gang ist nicht auf „P“ gestellt und die Geschwindigkeit ist null.
  • Umzug Der Gang ist nicht auf „P“ gestellt und die Geschwindigkeit ist nicht null.

Informationen dazu, wie Apps den Fahrstatus eines Autos nutzen und welche UX-Einschränkungen gelten, finden Sie unter Fahrstatus und UX-Einschränkungen nutzen.

Konfiguration von Einschränkungen basierend auf Laufwerkstatus

Um Ablenkungen des Fahrers zu vermeiden, ordnet Android den Fahrzustand einer Reihe von UX-Einschränkungen zu./packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Geparkt: Uneingeschränkt.
  • Leerlauf: 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. Mit /packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java werden die Regeln dann im Speicher gespeichert. Der Dienst ordnet den aktuellen Fahrzustand dann 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 keine Einschränkungen für zusätzliche Displays. Wenn Sie Einschränkungskonfigurationen für mehrere Displays erstellen möchten, fügen Sie das RestrictionMapping-Tag mit dem physicalPort 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 verschiedene Einschränkungen für die Modi default und passenger 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>
Sie können mit der API einen beliebigen Stringnamen für den Modus festlegen. Beispiel: die Methode 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.Builder erstellt werden, wodurch die Konfiguration beim Aufruf von 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 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);

Neue Konfiguration für UX-Einschränkungen beibehalten

Wenn eine neue Konfiguration übergeben wird, gibt der Dienst „UX Restrictions“ einen booleschen Wert zurück, der angibt, ob die neue Konfiguration erfolgreich gespeichert wurde. Diese neue Konfiguration wird nur verwendet, wenn die integrierte Haupteinheit (Integrated Head Unit, IHU) neu gestartet wird und das Auto geparkt ist. Intern enthält der Dienst „UX-Einschränkungen“ zwei Konfigurationssätze:

  • Produktion: Diese Konfiguration ist zwar optional, wird aber häufig verwendet. Der Dienst „UX-Einschränkungen“ liest diese Konfiguration beim Start.
  • Gestaffelt: Diese Konfiguration ist ebenfalls optional und hat keine Auswirkungen auf UX-Einschränkungen. Sie wird in die Produktion übertragen, wenn der Autoservice gestartet wird und das Auto geparkt ist.

Konfiguration des Produktions-Tracks

Abbildung 1: Konfiguration des Produktions-Tracks

Fehler beheben

Bis Fahrstatusinformationen von CarPropertyManager empfangen werden (z. B. während des Bootvorgangs), werden keine UX-Einschränkungen erzwungen. Das System verhält sich so, als wäre der Fahrmodus „Geparkt“ aktiv.

Wenn das Lesen einer gespeicherten Konfiguration fehlschlägt (z. B. aufgrund von „SettingNotFoundException“), 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() {}

Fahrstatus und Nutzerbeschränkungen

Im Folgenden werden die Interaktionen beschrieben, die im folgenden Diagramm dargestellt sind:

Interaktionen mit dem Fahrzustand

Abbildung 2: Interaktionen mit dem Fahrzustand

Attribute zur Ableitung des Fahrzustands

Verwenden Sie die folgenden drei VehiclePropertyIds, um den Fahrzustand abzuleiten:

Für Apps verfügbare APIs

Der Code befindet sich an den folgenden Stellen:

Code Standort
CarUxRestrictionsManager
Öffentliche APIs, für die Sie sich für Änderungen an UX-Einschränkungen registrieren können.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Definition von UX-Einschränkungen.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
System-APIs, die für Fahrzustandsänderungen registriert werden sollen.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

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