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.java
zapisuje 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ślnego i pasaż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>
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.
, 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.
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:
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.