Einschränkungen für die Autonutzung

Lesen Sie sich die Richtlinien zum Ablenken beim Fahren durch, bevor Sie fortfahren.

Auf dieser Seite werden die Regeln zur Einschränkung der Auto-Nutzererfahrung beschrieben, mit denen Sie mehrere Konfigurationen für UX-Einschränkungen (z. B. Europäische Union oder Japan) haben und dann festlegen, welche Regeln zur Laufzeit angewendet werden sollen. Weitere Informationen finden Sie unter CarUxEinschränkungen.

Mit dem Service „Car UX Restrictions“ können Entwickler neue UX-Einschränkungen für Autos definieren Konfiguration. Sollte ein Entwickler die Einschränkungsregeln ändern wollen (z. B. um lokale Sicherheitsstandards), kann der Entwickler mithilfe der API die neue Konfiguration 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 werden geladen, wenn der Dienst für UX-Einschränkungen neu gestartet wird und das Auto sich im Parkmodus befindet. Der Fahrdienst stellt sicher, dass sich das Auto im Parkmodus befindet, bevor die neue Konfiguration neu geladen wird.

Zusätzlich zur neuen Methode für den UX-Einschränkungsservice werden APIs bereitgestellt, um die Konfiguration. Der Status der Gangauswahl und -geschwindigkeit wird in einen von drei Fahrzuständen umgewandelt:

  • Geparkt. Ausrüstung im Park.
  • Inaktiv. Das Zahnrad ist nicht im Park und die Geschwindigkeit ist gleich null.
  • Verschieben. Ausrüstung steht nicht im Park und Geschwindigkeit ist nicht null.

Um zu erfahren, wie Apps den Fahrstatus eines Autos und die entsprechenden UX-Einschränkungen verbrauchen, Siehe Verbrauchszustand von Fahrzeugen und UX-Einschränkungen.

Einschränkungskonfiguration basierend auf Laufwerksstatus konfigurieren

Damit Fahrer nicht abgelenkt werden, ordnet Android den Fahrstatus bestimmten UX-Einschränkungen zu /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

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

Die oben dargestellte Zuordnung ist vorab festgelegt und als XML-Ressource konfiguriert. Die /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java und speichert die Regeln 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 werden keine Einschränkungen auf zusätzliche Bildschirme angewendet. Einschränkung erstellen für mehrere Displays konfigurieren, fügen Sie das RestrictionMapping-Tag mit dem physischerPort für diese Anzeige. Die entsprechenden Einschränkungen werden automatisch auf die einzelnen Display. Im folgenden Beispiel haben die Bildschirme 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. teen. Im folgenden Beispiel Für den Standardmodus und den Passagiermodus sind unterschiedliche Einschränkungen konfiguriert (Bisher wurde nur der Modus Passagier 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>
Mit der API können Sie einen beliebigen Stringnamen für den Modus festlegen. Zum Beispiel Methode setRestrictionMode(@NonNull String mode) in CarUxRestrictionsManager. (Früher mussten Sie die Methode setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)-Methode in CarUxRestrictionsManager).

CarUxRestrictionsConfiguration-APIs

Einschränkungen mit CarUxRestrictionsConfiguration

Die neue Klasse CarUxRestrictionsConfiguration wird 1:1 der aktuellen XML-Datei zugeordnet. Konfigurationsschema. CarUxRestrictionsConfiguration kann mit CarUxRestrictions.Builder erstellt werden, das die Konfiguration validiert. nach "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();

CarUxRestrictionsManager API

Legen Sie CarUxRestrictionsConfiguration für die nächste Fahrt mit CarUxRestrictionsManager fest. Diese Methode erfordert eine Berechtigung, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Neue Konfiguration für UX-Einschränkungen beibehalten

Wenn eine neue Konfiguration übergeben wird, gibt der UX-Einschränkungen-Dienst einen booleschen Wert zurück, um ob die neue Konfiguration gespeichert wurde. Diese neue Konfiguration wird nur verwendet, wenn Die integrierte Haupteinheit wird neu gestartet und das Auto parkt. Intern sind die UX-Einschränkungen Dienst enthält zwei Konfigurationssätze:

  • Produktion: Diese Konfiguration ist zwar optional, wird aber häufig verwendet. Die UX Der Einschränkungsdienst liest diese Konfiguration beim Start.
  • Bereitgestellt. Auch optional; diese Konfiguration hat keine Auswirkungen auf UX-Einschränkungen Er erhält den Status „Produktion“, wenn der Fahrdienst gestartet und das Auto geparkt wird.

Konfiguration des Produktions-Tracks

Abbildung 1: Konfiguration des Produktions-Tracks

Fehler beheben

Bis CarPropertyManager Informationen zum Fahrstatus erhalten hat (z. B. während Systemstart), werden die UX-Einschränkungen nicht erzwungen. Das System funktioniert wie Geparkt.

Sollte das Lesen einer gespeicherten Konfiguration fehlschlagen (z. B. bei „SettingNotFoundException“-Ergebnisse), wird die Der UX-Einschränkungsdienst greift 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 Designdiagramm dargestellt werden:

Interaktionen mit dem Fahrzustand

Abbildung 2: Interaktionen mit dem Fahrzustand

Attribute zum Ableiten des Fahrstatus

Leiten Sie den Fahrzustand anhand der folgenden drei VehiclePropertyIds ab:

Für Apps verfügbare APIs

Der Code befindet sich an folgenden Speicherorten:

Code Standort
CarUxRestrictionsManager
Öffentliche APIs zum Registrieren von Änderungen der UX-Einschränkungen.
/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 zum Registrieren von Fahrstatusänderungen
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Um Fahrzustände zu simulieren, siehe Test: