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
/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.
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:
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 .
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2024-04-29 UTC.