Ograniczenia korzystania z samochodu

Zanim przejdziesz dalej, zapoznaj się ze wskazówkami dotyczącymi rozpraszania uwagi.

Na tej stronie opisujemy reguły dotyczące ograniczeń w zakresie wygody korzystania z samochodu, których możesz używać do tworzenia wiele konfiguracji reguł ograniczeń UX (np. Unia Europejska a Japonia), a następnie określając zestaw reguł, które mają być stosowane w czasie wykonywania. Więcej informacji: CarUxRestrictions.

Usługa ograniczeń UX samochodu umożliwia deweloperom zdefiniowanie nowych ograniczeń UX samochodu. konfiguracji. Czy deweloper chce zmienić reguły ograniczeń (np. w celu zapewnienia zgodności z lokalnymi standard bezpieczeństwa), deweloper może użyć interfejsu API do zdefiniowania nowej konfiguracji.

Interfejs API do ustawiania konfiguracji jest powtarzany tylko w nowej konfiguracji. Innymi słowy, konfiguracja nie zaczyna obowiązywać od razu. Zamiast tego nowa konfiguracja jest wczytywane po ponownym uruchomieniu usługi ograniczeń UX i gdy samochód znajdzie się w trybie zaparkowania. Usługa samochodowa sprawdź, czy samochód znajduje się w trybie parkowania przed ponownym załadowaniem nowej konfiguracji.

Oprócz nowej metody usługi Ograniczenia UX dostępne są interfejsy API do tworzenia konfiguracji. Stan wyboru biegu i prędkość są zmieniane na jeden z trzech stanów jazdy:

  • Zaparkowany. Sprzęt w parku.
  • Brak aktywności. Sprzęt nie znajduje się w parku, a prędkość wynosi zero.
  • Przenoszenie. Sprzęt nie znajduje się w parku, a prędkość nie wynosi zero.

Aby dowiedzieć się, jak aplikacje wykorzystują stan jazdy samochodu i odpowiadające im ograniczenia UX, Więcej informacji: Korzystanie ze stanu jazdy samochodem i ograniczenia UX.

Konfiguracja ograniczeń na podstawie stanów dysku

Aby nie rozpraszać uwagi kierowcy, Android mapuje stan jazdy na zestaw ograniczeń dotyczących wygody użytkowania /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Zaparkowany. Bez ograniczeń.
  • Brak aktywności. Brak obrazu i ekranu konfiguracji.
  • Przenoszenie. Całkowicie ograniczony (wszystkie ograniczenia są wymagane).

Mapowanie pokazane powyżej jest wstępnie określone i skonfigurowane jako zasób XML. /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java a następnie zapisuje reguły w pamięci. Usługa mapuje obecny stan jazdy na ograniczenia UX i transmituje aktualne ograniczenia na cały 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>

Konfiguracje wielu wyświetlaczy

Domyślnie do dodatkowych wyświetlaczy nie są stosowane żadne ograniczenia. Aby utworzyć ograniczenie dla wielu wyświetlaczy, umieść tag RestrictionMapping z atrybutem fizyczny port wyświetlacza. Do każdego z nich automatycznie stosowane są odpowiednie ograniczenia wyświetlacz. W przykładzie poniżej ekrany z fizycznymi identyfikatorami portów 1 i 2 mają różne wartości. konfiguracje:

<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>

Konfiguracje trybów ograniczeń

Możesz wybrać dowolną nazwę trybu, na przykład Nastolatek. W poniższym przykładzie dla trybu domyślnego i pasażera skonfigurowano różne ograniczenia. (wcześniej obsługiwany był tylko tryb pasażera):

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
Za pomocą interfejsu API możesz ustawić dowolną nazwę ciągu znaków dla tego trybu. Na przykład plik Metoda setRestrictionMode(@NonNull String mode) w CarUxRestrictionsManager. (Wcześniej trzeba było używać atrybutu Metoda setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) w CarUxRestrictionsManager).

Interfejsy API CarUxRestrictionsConfiguration

Ograniczenia przy użyciu CarUxRestrictionsConfiguration

Nowa klasa CarUxRestrictionsConfiguration jest zmapowana w stosunku 1:1 na bieżący kod XML. schematu konfiguracji. CarUxRestrictionsConfiguration można utworzyć za pomocą metody CarUxRestrictions.Builder, która weryfikuje konfigurację podczas kompilacji().

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();

Interfejs API CarUxRestrictionsManager

Ustaw CarUxRestrictionsConfiguration na następny przejazd z: CarUxRestrictionsManager. Ta metoda wymaga uprawnień, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Utrzymaj nową konfigurację ograniczeń UX

Po przekazaniu nowej konfiguracji usługa ograniczeń UX zwraca wartość logiczną wskazującą, czy nowa konfiguracja została zapisana. Ta nowa konfiguracja jest używana tylko wtedy, gdy zintegrowany moduł główny (IHU) uruchomi się ponownie, a samochód zostanie zaparkowany. Wewnętrznie – Ograniczenia UX usługa zawiera dwa zbiory konfiguracji:

  • Produkcja. Konfiguracja ta jest opcjonalna, ale często jest dostępna. UX Usługa ograniczeń odczytuje tę konfigurację podczas uruchamiania.
  • Rozłożony. Ta konfiguracja nie ma też wpływu na ograniczenia UX i jest promowany w wersji produkcyjnej po uruchomieniu usługi samochodowej i po zaparkowaniu samochodu.

Konfiguracja produkcyjna

Rysunek 1. Konfiguracja produkcyjna

Niepowodzenia adresu

Dopóki nie otrzymasz informacji o stanie jazdy z usługi CarpropertyManager (na przykład podczas podczas uruchamiania), ograniczenia UX nie będą egzekwowane. System działa tak, jakby stan jazdy Zaparkowany.

Jeśli odczyt zapisanej konfiguracji nie powiedzie się (na przykład w wyniku setNotFoundException), Usługa ograniczeń UX korzysta z zakodowanego na stałe trybu pełnego ograniczonego dostępu:

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

Stan jazdy samochodem i ograniczenia dla użytkowników

Następujący schemat zawiera opis interakcji wyświetlanych na tym schemacie:

Zachęcanie do interakcji z stanami

Rysunek 2. Zachęcanie do interakcji z stanami

Właściwości używane do ustalania stanu jazdy

Te 3 elementy VehiclePropertyIds pozwalają uzyskać stan jazdy:

Interfejsy API dostępne dla aplikacji

Kod znajduje się w tych miejscach:

Kod Lokalizacja
CarUxRestrictionsManager,
Publiczne interfejsy API do rejestracji w celu wprowadzenia zmian ograniczeń UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions,
Definicja ograniczeń UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
Systemowe interfejsy API do rejestracji na potrzeby zmian stanu jazdy.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Aby symulować stany jazdy, zobacz Testowanie.