Ograniczenia korzystania z samochodu

Zanim przejdziesz dalej, zapoznaj się z wytycznymi dotyczącymi rozpraszania uwagi kierowcy.

Na tej stronie opisujemy reguły ograniczeń dotyczące środowiska użytkownika w samochodzie, których możesz używać do tworzenia wielu konfiguracji reguł ograniczeń dotyczących środowiska użytkownika (np. dla Unii Europejskiej i Japonii), a następnie określać, który zestaw reguł ma być stosowany w czasie działania. Więcej informacji znajdziesz w sekcji CarUxRestrictions.

Usługa Car UX Restrictions umożliwia deweloperom zdefiniowanie nowej konfiguracji ograniczeń UX w samochodzie. Jeśli deweloper chce zmodyfikować reguły ograniczeń (np. aby zachować zgodność z lokalnymi standardami bezpieczeństwa), może użyć interfejsu API do zdefiniowania nowej konfiguracji.

Interfejs API do ustawiania konfiguracji jest zachowywany tylko w nowej konfiguracji. Innymi słowy, konfiguracja nie zaczyna obowiązywać od razu. Nowa konfiguracja jest wczytywana po ponownym uruchomieniu usługi Ograniczenia UX i gdy samochód jest zaparkowany. Usługa samochodowa sprawdza, czy samochód jest zaparkowany, zanim ponownie załaduje nową konfigurację.

Oprócz nowej metody usługi UX Restrictions udostępniamy interfejsy API do tworzenia konfiguracji. Stan wybranego biegu i prędkości jest przekształcany w jeden z 3 stanów jazdy:

  • Zaparkowany Włączony bieg parkingowy.
  • Praca na biegu jałowym Brak biegu i prędkość równa zero.
  • Przeprowadzka Skrzynia biegów nie jest w trybie parkowania, a prędkość nie wynosi zero.

Aby dowiedzieć się, jak aplikacje wykorzystują stan jazdy samochodu i jakie ograniczenia UX z tym się wiążą, przeczytaj artykuł Wykorzystywanie stanu jazdy samochodu i ograniczenia UX.

Konfiguracja ograniczeń na podstawie stanów dysku

Aby nie rozpraszać uwagi kierowcy, Android przypisuje stan jazdy do zestawu ograniczeń UX./packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Zaparkowany Bez ograniczeń.
  • Praca na biegu jałowym Brak obrazu i ekranu konfiguracji.
  • Przeprowadzka Pełne ograniczenie (wszystkie ograniczenia są wymagane).

Przedstawione powyżej mapowanie jest wstępnie określone i skonfigurowane jako zasób XML. /packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java następnie zapisuje reguły w pamięci. Usługa mapuje następnie bieżący stan jazdy na ograniczenia UX i rozsyła bieżące ograniczenia do całego systemu.

<!-- 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 nie są stosowane żadne ograniczenia dotyczące dodatkowych wyświetlaczy. Aby utworzyć konfiguracje ograniczeń dla wielu wyświetlaczy, dodaj tag RestrictionMapping z wartością physicalPort dla danego wyświetlacza. Odpowiednie ograniczenia są automatycznie stosowane do każdego wyświetlacza. W poniższym przykładzie wyświetlacze z fizycznymi identyfikatorami portów 1 i 2 mają różne 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 ograniczonego dostępu

Możesz wybrać dowolną nazwę trybu, np. nastolatek. W tym przykładzie skonfigurowano różne ograniczenia dla trybów domyślnegopasażera (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ę trybu. Na przykład metoda setRestrictionMode(@NonNull String mode) w klasie CarUxRestrictionsManager. (Wcześniej w klasie CarUxRestrictionsManager używano metody setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)).

Interfejsy CarUxRestrictionsConfiguration API

Ograniczenia w przypadku CarUxRestrictionsConfiguration

Nowa klasa CarUxRestrictionsConfiguration jest mapowana 1:1 na bieżący schemat konfiguracji XML. CarUxRestrictionsConfiguration można utworzyć za pomocą CarUxRestrictions.Builder, który weryfikuje konfigurację podczas wywołania funkcji 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

Ustaw CarUxRestrictionsConfiguration na następną jazdę z CarUxRestrictionsManager. Ta metoda wymaga uprawnienia Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Zapisywanie nowej konfiguracji ograniczeń UX

Gdy zostanie przekazana nowa konfiguracja, usługa Ograniczenia UX zwraca wartość logiczną wskazującą, czy nowa konfiguracja została zapisana. Ta nowa konfiguracja jest używana tylko wtedy, gdy zintegrowana konsola centralna (IHU) zostanie ponownie uruchomiona, a samochód jest zaparkowany. Wewnętrznie usługa Ograniczenia UX zawiera 2 zestawy konfiguracji:

  • Produkcja Ta konfiguracja jest opcjonalna, ale często występuje. Usługa Ograniczenia UX odczytuje tę konfigurację podczas uruchamiania.
  • Etapowe Ta konfiguracja jest też opcjonalna i nie ma wpływu na ograniczenia UX. Jest promowana do wersji produkcyjnej, gdy usługa samochodowa jest uruchamiana i gdy samochód jest zaparkowany.

Konfiguracja produkcyjna

Rysunek 1. Konfiguracja produkcyjna

Błędy związane z adresem

Dopóki informacje o stanie jazdy nie zostaną odebrane z CarPropertyManager (np. podczas uruchamiania), ograniczenia UX nie będą egzekwowane. System działa tak, jakby stan jazdy był ustawiony na „Zaparkowany”.

Jeśli odczytanie zapisanej konfiguracji się nie powiedzie (np. wystąpi wyjątek SettingNotFoundException), usługa UX Restrictions przełącza się na tryb w pełni ograniczony, który jest zakodowany na stałe:

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

Stan jazdy i ograniczenia użytkownika

Poniżej opisujemy interakcje przedstawione na tym diagramie:

Interakcje podczas jazdy samochodem

Rysunek 2. Interakcje podczas jazdy samochodem

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

Aby określić stan jazdy, użyj tych 3 VehiclePropertyIds:

Interfejsy API dostępne dla aplikacji

Kod znajduje się w tych lokalizacjach:

Kod Lokalizacja
CarUxRestrictionsManager
Publiczne interfejsy API do rejestrowania zmian ograniczeń UX.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Definicja ograniczeń UX.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
Interfejsy API systemu do rejestrowania zmian stanu jazdy.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Informacje o symulowaniu stanów jazdy znajdziesz w sekcji Testowanie.