Optymalizacja rozpraszania uwagi jest narzędziem ograniczającym interakcję kierowcy z aplikacją Ustawienia samochód jest w ruchu. Niektóre ustawienia trzeba zmienić podczas jazdy, więc aplikacja nie całkowicie zablokowane. Domyślnie jednak większość ustawień jest wyłączona, wykorzystując tylko klawisze które można łatwo aktualizować.
Rysunek 1. Aplikacje włączone podczas jazdy
Blokowane mogą też być całe aktywności, które nie są zoptymalizowane, jak pokazano poniżej. Ta metoda jest obecnie używana głównie do wyszukiwania ustawień.
Rysunek 2. Cała aktywność została zablokowana
Podstawowe modyfikacje wydajności działania powodującego konwersję można dostosować za pomocą konfiguracji nakładki. Jeśli potrzebujesz bardziej precyzyjnego dostosowania, dodatkowe zmiany mogą przez kod.
Dostosowywanie wysokiego poziomu
Gdy dana preferencja jest wyłączona podczas jazdy, kliknięcie jej powoduje wyświetlenie komunikatu
z informacją, że ustawienie jest niedostępne podczas jazdy,
jest podłączony kontroler preferencji. W wiadomości jest używany element
Ciąg tekstowy restricted_while_driving
, który można dostosować za pomocą nakładki
(pod warunkiem, że ciąg znaków nie przekracza limitu 60 znaków).
Rysunek 3. Spersonalizowana nakładka
Całą platformę DOT można wyłączyć za pomocą polecenia config_always_ignore_ux_restrictions
.
Jeśli zasada ma wartość Prawda, kierowca może wchodzić w interakcje z każdym aspektem
Ustawienia.
<bool name="config_always_ignore_ux_restrictions">true</bool>
Jeśli powyższa konfiguracja ma wartość Fałsz, aplikacja Ustawienia przełącza się na
config_ignore_ux_restrictions
by określić, które preferencje powinny być włączone podczas jazdy. Podane tutaj ciągi tekstowe
powinien wskazywać ciągi tekstowe zdefiniowane w polu preference_keys.xml.
Przykład
Ten przykład pokazuje, jak podczas jazdy włączyć ustawienie głęboko zagnieżdżone
pokazuje, jak włączyć ustawienia przetwarzania tekstu na mowę (TTS). Aby to działało,
dodaj wszystkie ustawienia w hierarchii do zadania config_ignore_ux_restrictions
.
Dotyczy to systemu, języków i danych wejściowych oraz preferencji dotyczących zamiany tekstu na mowę do konfiguracji, ponieważ nasza hierarchia jest
System->Języki i Wprowadzanie -> Zamiana tekstu na mowę. Preferencje
we fragmencie tekstu do zamiany tekstu na mowę jest nadal wyłączona. Aby je włączyć,
musimy dodać klucze odpowiadające preferencjom. W tym
Na przykład chcemy włączyć preferencje odtwarzania, ale nie silnik
więc dodamy do naszej konfiguracji pk_tts_playback_group
.
<string-array name="config_ignore_ux_restrictions"> [...] <item>@string/pk_system_settings_entry</item> <item>@string/pk_languages_and_input_settings</item> <item>@string/pk_tts_settings_entry</item> <item>@string/pk_tts_playback_group</item> </string-array>
Szczegółowe dostosowanie
Niektóre preferencje mogą wymagać bardziej spersonalizowanych działań niż wystarczy włączyć/wyłączyć preferencje na podstawie stanu jazdy. Przykład: Bluetooth i Wi-Fi zostały już zmienione, by wyświetlać zapisane urządzenia Bluetooth lub Punkty dostępu do sieci Wi-Fi podczas jazdy.
Obecnie nie ma rozwiązania opartego na konfiguracji, które umożliwiałoby
korekty. Zamiast tego możesz utworzyć klasę niestandardową, która rozszerza
PreferenceController i zastępuje ustawienie onApplyUxRestrictions()
, aby nadać
zmian.
Po utworzeniu niestandardowego kontrolera preferencji możesz nałożyć odpowiedni plik XML możesz zastąpić domyślny kontroler preferencji własną implementacją.
Przykłady
Niektóre ustawienia w ustawieniach samochodu są bardziej dostosowane do indywidualnych potrzeb. wykorzystane jako przykłady do dodatkowego dostosowania, Na przykład na liście punktów dostępu Wi-Fi pożądane działanie to wyświetlanie tylko zapisanych punktów dostępu podczas jazdy (i ukrywanie pozostałych). W tym celu wykonaj następujące czynności:
} else if (shouldApplyUxRestrictions(getUxRestrictions())) { wifiEntries = getCarWifiManager().getSavedWifiEntries(); } else { wifiEntries = getCarWifiManager().getAllWifiEntries(); }
Widoczne tutaj punkty dostępu są już ograniczone,
Nie chcesz stosować dodatkowych ustawień typu UxRestrictions
do tych preferencji.
Dlatego zastąp ustawienie onApplyUxRestrictions
i wykonaj zamierzone działanie
brak operacji:
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { // Since the list dynamically changes based on the UX restrictions, we // enable this fragment regardless of the restriction. Intentional no-op. }
Inny przykład dotyczy urządzeń połączonych przez Bluetooth.
Aby kontynuować włączanie i wyłączanie łączenia urządzeń Bluetooth, ale chciałem
wyłączyć dostęp do dodatkowych ustawień tych urządzeń. Aby to osiągnąć,
ponownie zastąp onApplyUxRestrictions
, ale tym razem, jeśli NO_SETUP
ograniczenie jest aktywne, ukryj działanie dodatkowe w odniesieniu do tego ustawienia.
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { super.onApplyUxRestrictions(uxRestrictions); if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) { updateActionVisibility(getPreference(), /* isActionVisible= */ false); } }