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

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:

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 |
|---|---|
CarUxRestrictionsManagerPubliczne interfejsy API do rejestrowania zmian ograniczeń UX. |
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictionsDefinicja 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.