Ograniczenia korzystania z samochodu

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

Na tej stronie opisujemy reguły dotyczące ograniczeń UX w samochodzie, których możesz używać do tworzenia wielu konfiguracji reguł dotyczących ograniczeń UX (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 artykule CarUxRestrictions.

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

Interfejs API do ustawiania konfiguracji jest dostępny tylko w nowej konfiguracji. Innymi słowy, konfiguracja nie zaczyna obowiązywać natychmiast. Nowa konfiguracja jest wczytywana po ponownym uruchomieniu usługi ograniczeń UX i gdy samochód jest zaparkowany. Usługa samochodowa sprawdza, czy samochód jest zaparkowany, zanim ponownie wczyta nową konfigurację.

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

  • Zaparkowany Bieg ustawiony na parkowanie.
  • Na biegu jałowym Bieg nie jest ustawiony na parkowanie, a prędkość wynosi 0.
  • W ruchu Bieg nie jest ustawiony na parkowanie, a prędkość nie wynosi 0.

Aby dowiedzieć się, jak aplikacje korzystają ze stanu jazdy samochodu i powiązanych z nim ograniczeń UX, przeczytaj artykuł Korzystanie ze stanu jazdy samochodu i ograniczeń UX.

Konfiguracja ograniczeń na podstawie stanów jazdy

Aby zapobiec rozpraszaniu uwagi kierowcy, Android mapuje stan jazdy na zestaw ograniczeń UX /packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Zaparkowany Bez ograniczeń.
  • Na biegu jałowym Brak wideo i ekranu konfiguracji.
  • W ruchu Pełne ograniczenie (wszystkie ograniczenia są wymagane).

Mapowanie przedstawione powyżej jest wstępnie określone i skonfigurowane jako zasób XML. /packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java następnie zapisuje reguły w pamięci. Usługa mapuje bieżący stan jazdy na ograniczenia UX i rozgłasza bieżące ograniczenia w całym systemie.

<!-- 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 ekranów

Domyślnie do dodatkowych ekranów nie są stosowane żadne ograniczenia. Aby utworzyć konfiguracje ograniczeń dla wielu ekranów, dodaj tag RestrictionMapping z wartością physicalPort dla danego ekranu. Odpowiednie ograniczenia są automatycznie stosowane do każdego ekranu. W tym przykładzie ekrany z identyfikatorami physicalPort 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 trybów default i passenger (wcześniej obsługiwany był tylko tryb passenger):

<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 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. CarUxRestrictionsConfiguration można utworzyć za pomocą CarUxRestrictions.Builder, który weryfikuje konfigurację podczas tworzenia.

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ępną jazdę za pomocą CarUxRestrictionsManager. Ta metoda wymaga uprawnienia Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Utrwalanie nowej konfiguracji ograniczeń UX

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

  • Produkcyjna Ta konfiguracja jest opcjonalna, ale często występuje. Usługa ograniczeń UX odczytuje tę konfigurację podczas uruchamiania.
  • Etapowa Ta konfiguracja jest również opcjonalna i nie ma wpływu na ograniczenia UX . Jest promowana do wersji produkcyjnej, gdy usługa samochodowa zostanie uruchomiona, a samochód jest zaparkowany.

Konfiguracja produkcyjna

Rysunek 1. Konfiguracja produkcyjna

Rozwiązywanie problemów

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 nie powiedzie się (np. wystąpi wyjątek SettingNotFoundException), usługa ograniczeń UX przełączy się na tryb z pełnymi ograniczeniami zakodowany na stałe:

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

Stan jazdy i ograniczenia użytkownika

Poniższa treść opisuje interakcje przedstawione na tym schemacie:

Interakcje podczas jazdy samochodem

Rysunek 2. Interakcje ze stanem jazdy

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

Do określania stanu jazdy użyj tych 3 właściwości 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/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Definicja ograniczeń UX.
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
Interfejsy API systemu do rejestrowania zmian stanu jazdy.
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Aby symulować stany jazdy, przeczytaj sekcję Testowanie.