Ograniczenia korzystania z samochodu

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

Ta strona zawiera opis zasad ograniczeń wrażeń użytkownika w samochodzie, których możesz używać do tworzenia wielu konfiguracji zasad ograniczeń wrażeń użytkownika (np. dla Unii Europejskiej i Japonii), a następnie określania, które zestawy zasad mają być stosowane w czasie działania. Więcej informacji znajdziesz w CarUxRestrictions.

Usługa Car UX Restrictions umożliwia deweloperom zdefiniowanie nowej konfiguracji Car UX Restrictions. Jeśli deweloper chce zmodyfikować reguły ograniczeń (np. w celu dostosowania do lokalnych standardów bezpieczeństwa), może użyć interfejsu API, aby zdefiniować nową konfigurację.

Interfejs API do ustawiania konfiguracji jest dostępny tylko w nowej konfiguracji. Innymi słowy, konfiguracja nie zacznie obowiązywać natychmiast. Zamiast tego nowa konfiguracja jest wczytywana, gdy usługa UX Restrictions zostanie ponownie uruchomiona i samochód jest zaparkowany. Serwis samochodowy musi się upewnić, że samochód jest w trybie parkowania, zanim przeładuje nową konfigurację.

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

  • Zaparkowany. Sprzęt w parku.
  • Bezczynność. Bieg nie jest w pozycji Park, a prędkość wynosi 0.
  • Przeprowadzka. Skrzynia biegów nie jest w trybie Park, a prędkość nie wynosi 0.

Aby dowiedzieć się, jak aplikacje korzystają z stanu jazdy samochodem i odpowiednich ograniczeń UX, przeczytaj artykuł Consuming Car Driving State and UX Restrictions (w języku angielskim).

Konfiguracja ograniczeń na podstawie stanów jazdy

Aby nie rozpraszać uwagi kierowcy, Android mapuje stan jazdy na zestaw ograniczeń UX./packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Zaparkowany. Bez ograniczeń.
  • Bezczynność. Brak filmu i ekranu konfiguracji.
  • Przeprowadzka. Całkowite ograniczenie (wszystkie ograniczenia są wymagane).

Zdefiniowane powyżej mapowanie jest z góry określone i skonfigurowane jako zasób XML. Następnie /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.javazapisuje reguły w pamięci. Następnie usługa mapuje bieżący stan jazdy na ograniczenia UX i przekazuje aktualne 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 dla wielu wyświetlaczy

Domyślnie nie ma żadnych ograniczeń dotyczących dodatkowych wyświetlaczy. Aby utworzyć konfiguracje ograniczeń dla wielu wyświetlaczy, dodaj tag RestrictionMapping do portu fizycznego danego wyświetlacza. Odpowiednie ograniczenia są automatycznie stosowane do każdego wyświetlacza. W tym 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 ograniczeń

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

Interfejsy API CarUxRestrictionsConfiguration

Ograniczenia z CarUxRestrictionsConfiguration

Nowa klasa CarUxRestrictionsConfiguration jest mapowana 1:1 na bieżący schemat konfiguracji XML. Obiekt CarUxRestrictionsConfiguration można utworzyć za pomocą obiektu CarUxRestrictions.Builder, który weryfikuje konfigurację podczas wywołania metody 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 przekazana zostanie nowa konfiguracja, usługa UX Restrictions zwraca wartość logiczną wskazującą, czy nowa konfiguracja została zapisana. Ta nowa konfiguracja jest używana tylko wtedy, gdy zintegrowana konsola główna (IHU) jest ponownie uruchamiana, a samochód jest zaparkowany. Wewnętrznie usługa ograniczeń UX zawiera 2 zestawy konfiguracji:

  • Produkcyjna. Ta opcja jest opcjonalna, ale często jest używana. Usługa UX Restrictions odczytuje tę konfigurację podczas uruchamiania.
  • Etapowe. Ta opcjonalna konfiguracja nie ma wpływu na ograniczenia UX i jest promowana do wersji produkcyjnej, gdy usługa samochodowa rozpoczyna się i kończy.

Konfiguracja produkcyjna

Rysunek 1. Konfiguracja produkcyjna

Adresy nieprawidłowe

Dopóki CarPropertyManager nie otrzyma informacji o stanie jazdy (np. podczas uruchamiania), ograniczenia dotyczące UX nie będą stosowane. System działa tak, jakby stan jazdy był zaparkowany.

Jeśli odczyt zapisanej konfiguracji zakończy się niepowodzeniem (np. z powodu błędu SettingNotFoundException), usługa UX Restrictions przełączy się na twardo zakodowany tryb całkowicie ograniczony:

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

Stan jazdy i ograniczenia dla użytkowników

Poniżej opisujemy interakcje pokazane na tym diagramie:

Interakcje z stanem jazdy samochodem

Rysunek 2. Interakcje z stanem jazdy samochodem

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

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

Interfejsy API dostępne dla aplikacji

Kod znajduje się w tych miejscach:

Kod Lokalizacja
CarUxRestrictionsManager
Publiczne interfejsy API do rejestrowania 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
Interfejsy API systemu do rejestrowania zmian stanu jazdy.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Aby symulować stany jazdy, zapoznaj się z artykułem Testowanie.