Ograniczenia doświadczenia użytkownika samochodu

Zanim będziesz kontynuować, zapoznaj się z wytycznymi dotyczącymi rozpraszania uwagi podczas jazdy .

Na tej stronie opisano reguły ograniczeń UX (Car User Experience), których można użyć do utworzenia wielu konfiguracji reguł ograniczeń UX (na przykład Unia Europejska a Japonia), a następnie określenia, który zestaw reguł ma zostać zastosowany w czasie wykonywania. Aby uzyskać więcej informacji, zobacz CarUxRestrictions .

Usługa Car UX Restrictions umożliwia programistom zdefiniowanie nowej konfiguracji Car UX Restrictions. Jeśli programista chce zmodyfikować zasady ograniczeń (np. w celu zapewnienia zgodności z lokalnymi standardami bezpieczeństwa), może użyć interfejsu API do zdefiniowania nowej konfiguracji.

Interfejs API umożliwiający ustawienie konfiguracji zostanie zachowany tylko w nowej konfiguracji. Innymi słowy, konfiguracja nie zacznie obowiązywać natychmiast. Zamiast tego nowa konfiguracja jest ładowana po ponownym uruchomieniu usługi Ograniczenia UX i samochodzie w trybie Parkowania. Serwis samochodowy upewnia się, że samochód znajduje się w Parku przed ponownym załadowaniem nowej konfiguracji.

Oprócz nowej metody usługi Ograniczenia UX dostępne są interfejsy API umożliwiające konstruowanie konfiguracji. Stan wyboru biegu i prędkości jest konwertowany na jeden z trzech stanów jazdy:

  • Zaparkowany. Sprzęt w parku.
  • Na biegu jałowym. Bieg nie jest w trybie parkowania, a prędkość wynosi zero.
  • Poruszający. Bieg nie jest w położeniu parkowania, a prędkość nie jest równa zeru.

Aby dowiedzieć się, w jaki sposób aplikacje korzystają ze stanu jazdy samochodu i odpowiednich ograniczeń UX, zobacz Korzystanie ze stanu jazdy samochodem i Ograniczenia UX .

Konfiguracja ograniczeń na podstawie stanów dysku

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

  • Zaparkowany. Nieograniczony.
  • Na biegu jałowym. Brak wideo i ekranu konfiguracyjnego.
  • Poruszający. W pełni ograniczone (wymagane są wszystkie ograniczenia).

Mapowanie przedstawione powyżej jest z góry określone i skonfigurowane jako zasób XML. The Następnie /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java zapisuje następnie reguły w pamięci. Usługa następnie mapuje bieżący stan jazdy na ograniczenia UX i rozgłasza 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 do dodatkowych wyświetlaczy nie są stosowane żadne ograniczenia. Aby utworzyć konfiguracje ograniczeń dla wielu wyświetlaczy, dołącz znacznik RestrictionMapping do portu fizycznego tego wyświetlacza. Odpowiednie ograniczenia są automatycznie stosowane do każdego wyświetlacza. W poniższym przykładzie wyświetlacze z identyfikatorami portów fizycznych 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, na przykład nastolatek . W poniższym przykładzie skonfigurowano różne ograniczenia dla trybu domyślnego i trybu pasażerskiego (poprzednio obsługiwany był tylko tryb pasażerski ):

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
Możesz użyć API, aby ustawić dowolną nazwę ciągu dla 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 konfiguracji CarUxRestrictions

Ograniczenia w konfiguracji CarUxRestrictionsConfiguration

Nowa klasa CarUxRestrictionsConfiguration jest mapowana 1:1 na bieżący schemat konfiguracji XML. CarUxRestrictionsConfiguration można utworzyć za pomocą CarUxRestrictions. Builder , który sprawdza konfigurację za pomocą 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();

API CarUxRestrictionsManager

Ustaw CarUxRestrictionsConfiguration dla następnego dysku za pomocą CarUxRestrictionsManager . Ta metoda wymaga pozwolenia 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 pomyślnie zapisana. Ta nowa konfiguracja jest używana tylko po ponownym uruchomieniu zintegrowanej jednostki głównej (IHU) i zaparkowaniu samochodu. Wewnętrznie usługa ograniczeń UX zawiera dwa zestawy konfiguracji:

  • Produkcja. Choć opcjonalna, ta konfiguracja jest często obecna. Usługa ograniczeń UX odczytuje tę konfigurację podczas uruchamiania.
  • Wystawiany na scenie. Również opcjonalna, ta konfiguracja nie ma wpływu na ograniczenia UX i zostaje awansowana do wersji produkcyjnej, gdy rozpoczyna się obsługa samochodu i gdy samochód jest zaparkowany.

Konfiguracja produkcyjna

Rysunek 1. Konfiguracja produkcyjna

Adresowanie błędów

Dopóki informacje o stanie jazdy nie zostaną odebrane z CarPropertyManager (na przykład podczas uruchamiania), ograniczenia UX nie będą egzekwowane. System działa tak, jakby pojazd był zaparkowany.

Jeśli odczytanie zapisanej konfiguracji nie powiedzie się (na przykład wyników SettingNotFoundException), usługa ograniczeń UX powróci do zakodowanego na stałe, w pełni ograniczonego trybu:

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

Stan jazdy i ograniczenia użytkownika

Poniższa treść opisuje interakcje wyświetlane na poniższym schemacie projektowym:

Interakcje stanu jazdy

Rysunek 2. Interakcje stanu jazdy

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

Użyj następujących trzech VehiclePropertyIds , aby określić stan jazdy:

Interfejsy API dostępne dla aplikacji

Kod znajduje się w następujących lokalizacjach:

Kod Lokalizacja
CarUxRestrictionsManager
Publiczne interfejsy API umożliwiające rejestrację 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 umożliwiające rejestrację zmian stanu.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Aby symulować stany jazdy, zobacz Testowanie .