Wszystkie ulepszenia platformy Androida oparte na czujnikach haptycznych są spowodowane zbiorem zasad UX, które ewoluują w równym tempie. Aktualna zasady obejmują zastąpienie głośnych wibracji wyraźnymi czujnikami haptycznymi. dzięki bogatym czujnikom haptycznym.
Rysunek 1. Obecne zasady
W poniższej tabeli znajdziesz wszystkie dostępne interfejsy API z czujnikiem haptycznym.
Interfejs API | Metody | Dodano rok |
---|---|---|
android.view.stałe reakcje haptyczne |
|
Przed 2016 r. |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
Android.View |
|
Przed 2016 r. |
android.os.Wibrator |
|
Przed 2016 r. |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.os.Efekt wibracyjny |
|
2017 (Android 8) |
|
2019 (Android 10) | |
android.os.Efekt Wibracji.Kompozycja |
|
2020 (Android 11) |
android.media.AudioAttributes.Builder |
|
2019 (Android 10) |
Tętniące życiem wibracje
Od pagerów i telefonów z podstawową przeglądarką oraz niskiej jakości, ale energooszczędnego systemu zarządzania relacjami z klientami wibracje oparte na dzwonku zastąpiły dzwonienie trybie cichym. Starsze komponenty sprzętowe, które generują głośne i nieprzyjemne dźwięki słyszalne szumy mogą uszkodzić reakcje haptyczne, ponieważ są to wyświetlenia niskiej jakości (na np. tani, zepsuty telefon).
Wyczyść czujnik haptyczny
Wyraźny czujnik haptyczny wzbudza odczucie dyskretnych zmian stanu (np. zmiany binarne podczas włączania/wyłączania zasilania). Ze względu na charakter dyskretną afordancję, jednoznaczne czujniki haptyczne są generowane jako pojedynczy element (na potrzeby np. jeden efekt haptyczny na jedno zdarzenie wejściowe).
Celem Androida jest wyraźna reakcja haptyczna dająca silne, ale ostre wrażenia. niż uczucie hałasu lub nieśmiałości.
Wstępnie zdefiniowane stałe haptyczne, które są tworzone z myślą o obsłudze wyraźnego czujnika haptycznego, to m.in. w następujący sposób.
CLOCK_TICK
CONFIRM
CONTEXT_CLICK
GESTURE_END
GESTURE_START
KEYBOARD_PRESS
KEYBOARD_RELEASE
KEYBOARD_TAP
LONG_PRESS
REJECT
TEXT_HANDLE_MOVE
VIRTUAL_KEY
VIRTUAL_KEY_RELEASE
EFFECT_CLICK
EFFECT_DOUBLE_CLICK
EFFECT_HEAVY_CLICK
EFFECT_TICK
Dzielenie się wspólną wiedzą między producentami urządzeń i deweloperami jest kluczowe poprawę ogólnej jakości reakcji haptycznych w ekosystemie Androida. Użyj podstawowej listy kontrolnej, oceny sprzętu, oraz CDD. aby dowiedzieć się więcej o wdrażaniu reakcji haptycznych.
Rysunek 3. Naciskanie i puszczanie.
Bogata reakcja haptyczna
Bogata reakcja haptyczna to rozwijająca się kategoria, która wykracza poza zakres funkcji haptycznych. oparte na impulsach. Android chce obsługiwać zaawansowane czujniki haptyczne i możliwości ich dostosowania na bardzo szczegółowym poziomie. Poniżej są obsługiwane w Androidzie 11 i starszych wersjach.
Rysunek 4. Bogata reakcja haptyczna z przesuwaną teksturą
Rysunek 5. Przeciąganie i przesuwanie
Przypadek użycia 1. Przesuwanie tekstury
Jeśli efekt haptyczny powtarza się, gdy palec przesuwa się po powierzchni dotykowej (na na przykład przeciąganie, przesuwanie, poznawanie powierzchni za pomocą wzruszającej tekstury haptycznej), powtórzone efekty haptyczne powinny być ostre i subtelne.
Jeśli w danym przypadku efekt jest głośny, a nie wyraźny, odstępy między i powtórzenia mogą zostać wyeliminowane. Efektem jest jeden długi szum, niż wiele odrębnych sygnałów.
Jeśli amplituda nie jest wystarczająco subtelna, odczuwana energia haptyczna narasta. przez powtórzenia, co skutkuje niezwykłą czułością haptyczną na końcu lub powtórzenia.
Zastosuj prostą teksturę haptyczną na potrzeby gestów przesuwania i przeciągania
Używaj aplikacji CLOCK_TICK
i TEXT_HANDLE_MOVE
w
HapticFeedbackConstants
.
Te stałe określają cechy powtórzenia i amplitudy.
Utwórz własny efekt
Aby utworzyć własny efekt, skomponuj projekt, łącząc ze sobą sekwencje
z PRIMITIVE_CLICK
i PRIMITIVE_TICK
w
VibrationEffect.Composition
.
Możesz dostosować charakterystykę powtórzenia i skali amplitudy
za pomocą funkcji addPrimitive(int primitiveID, float scale, int delay)
. Pomoc zależy od
CAP_COMPOSE_EFFECTS
funkcji
Interfejs HAL Vibrator.
Przypadek użycia 2. Długie wibracje z efektem wygładzania
Długa wibracja to płynna amplituda, która zmienia się od 0 do docelowa amplituda. Długie wibracje mogą wywoływać zauważenie reakcja haptyczna. Jednak nagłe, długie wibracje mogą wystraszyć użytkowników, gdy i często słychać tu buczenie. Aby generować więcej przyjemne, długie wibracje, zastosuj efekt łagodności na początku długiego wibracjami. W ten sposób powstaje płynne przejście amplitudy, które narasta w kierunku docelowa amplituda.
Zastosuj efekt wygładzania
Sprawdź możliwości sprzętowe regulacji amplitudy za pomocą
android.os.Vibrator.hasAmplitudeControl()
- Aby uzyskać efekt łagodzenia za pomocą funkcji, wynik musi wynosić
true
o zmiennej amplitudzie.
- Aby uzyskać efekt łagodzenia za pomocą funkcji, wynik musi wynosić
Używaj
VibrationEffect
.createWaveform(timings[], amplitudes[], int repeat)
Dostosuj serię
timings[]
iamplitudes[]
, aby wygenerować zgodnie z rys. 6.
Rysunek 6. Długa krzywa prostoty wibracji
Przypadek użycia 3: czujnik haptyczny sprzężony z dźwiękiem
Reakcja haptyczna sprzężona przez dźwięk to wzorce haptyczne połączone z rytmem dźwięku. zwrócić uwagę użytkownika.
Reakcja haptyczna sprzężona audio: korzyści
Aby zastosować czujnik haptyczny połączony z dźwiękiem, połącz wyraźne czujniki haptyczne z długimi wibracjami. Silne, ale krótkie uczucie haptyczne, wynikające z wyraźnych reakcji haptycznych, zapewnia rytmiczne wzory. W połączeniu z wysokimi poziomami bodźców przez długi czas Wibracje znakomicie przyciągają uwagę użytkownika.
Ważne jest, aby wziąć pod uwagę rytmiczne wzorce czucia. Jeśli nie ma sensu rytmu serca, użytkownik postrzega odczucia haptyczne jako przypadkowe wibrowanie i i zignorować je.
Rysunek 7. Przykład czujnika haptycznego pary dźwięku
Reakcja haptyczna sprzężona z dźwiękiem: wskazówki
Wdrożenie reakcji na dotyk połączonej z dźwiękiem wymaga podstawowej wiedzy na temat treści odtwarzania zarówno kanałów audio, jak i haptycznych. Pamiętaj o tych kwestiach.
Korzystanie z
MediaPlayer
lubSoundPool
zajęcia.- Zasoby w formacie OGG ze specjalnym kluczem metadanych
(
ANDROID_HAPTIC
, po czym następuje kilka kanałów haptycznych) wskazuje obecność danych haptycznych i odtwarzanie z użyciemMediaPlayer
iSoundPool
.
- Zasoby w formacie OGG ze specjalnym kluczem metadanych
(
Wskaż obsługę reakcji haptycznych i odtwarzania dźwięku w:
audio_policy_configuration.xml
- Użyj profilu wyjściowego z kanałem reakcji haptycznych
AUDIO_CHANNEL_OUT_HAPTIC_A|B
- W przypadku strumienia wyjściowego z kanałami haptycznymi pamiętaj, że Kanały są prezentowane w danych jako dodatkowe kanały.
Przykład
Jeśli maska kanału dla strumienia wyjściowego wygląda tak:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A
Następnie każda próbka powinna wyglądać tak:
AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A
- Użyj profilu wyjściowego z kanałem reakcji haptycznych
Zmień
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
dofalse
, aby włączyć kanał haptyczny.- Domyślnie kanały reakcji haptycznych są wyciszone (
true
). - Przypadki użycia obejmują dzwonki i dźwięki interfejsu z synchronizacją reakcja haptyczna i reakcja haptyczna.
- Domyślnie kanały reakcji haptycznych są wyciszone (
HAL Vibrator musi implementować zewnętrzne wsparcie kontroli.
- W przypadku implementacji HIDL użyj
setExternalControl(bool enabled) generates (Status status)
. - W przypadku implementacji AIDL użyj
void setExternalControl(in boolean enabled)
.
- W przypadku implementacji HIDL użyj
Rysunek 8. Wdrożenie reakcji haptycznych połączonych dźwiękami
Czujnik haptyczny sprzężony z dźwiękiem: generator haptyczny
HapticGenerator
jest efektem dźwiękowym
wprowadzone w Androidzie 12, które mogą generować dane haptyczne na podstawie kanału audio
odtwarzać ją w czasie rzeczywistym jako sprzęt haptyczny połączony z dźwiękiem.
Efekt zostanie zastosowany do zakresu AudioTrack
zgodnie z opisem na Rysunku 9.
Rysunek 9. Architektura generatora haptycznego
Aby mieć pewność, że algorytm generatora haptycznego generuje wysokiej jakości czujniki haptyczne, dostroić algorytm generowania do silnika wibracyjnego urządzenia, dostosowując parametrów konfigurujących łańcuch filtrów, które są stosowane do fal dźwiękowych. W tej sekcji szczegółowo opisujemy te parametry oraz wyjaśniamy, jak je dostrajać zgodnie ze specyfikacją sprzętu.
Częstotliwość rezonansowa dla filtra pasmowego
Częstotliwość rezonansu wibracyjnego to częstotliwość, z jaką uruchamiany jest element haptyczny ma maksymalną moc wyjściową. Ten parametr reguluje antyrezonator częściowo spłaszcz funkcję przesyłania odpowiedzi w celu uzyskania większej przepustowości. Platforma Androida automatycznie łączy tę wartość z danymi wyjściowymi interfejsu Metoda HAL wibracji
IVibrator.getResonantFrequency
.Wartość domyślna tego parametru to 150 Hz. Można to zmienić w tutaj.
Moc normalizacji dla wolnej obwiedni
Ten parametr określa wykładnik w częściowej normalizacji. (automatyczna kontrola wzmocnienia). Jej wartość domyślna to -0,8, co oznacza, że Ten krok kontroli wzmocnienia usuwa 80% zmian zakresu dynamicznego. Można to zmienić w kodzie tutaj.
Współczynnik Q filtra zatrzymania zakresu
Współczynnik jakości wibracji (współczynnik Q) jest określany na podstawie 2 parametrów:
Zero Q, współczynnik jakości zer w filtrze zakresu czasowego, który częściowo eliminuje rezonans.
Biegun Q, współczynnik jakości słupków w filtrze zmiennym.
Stosunek tych dwóch wartości ogranicza tłumienie rezonansów w kolejności aby wzmocnić niższe częstotliwości i rozszerzyć odpowiedź algorytmu. Przykład: domyślne wartości 8 dla zero Q i 4 dla bieguna Q. współczynnik 2, co ogranicza tłumienie rezonansów do 2 (6 dB). Platforma Androida łączy obie wartości z danymi wyjściowymi interfejsu Vibrator HAL metoda
IVibrator.getQFactor
.Jeśli wartości domyślne nie uwzględniają tłumienia siły silnika zalecamy zmianę obu tych wartości jednocześnie. albo zwiększania, albo zmniejszania obu tych elementów. Stosunek zero Q do bieguna Q powinna być większa niż 1. Można to zmienić w kodzie tutaj.
Częstotliwość narożników zniekształceń
Częstotliwość narożników jest stosowana przez filtr dolnoprzepustowy, który ukrywa wibracje niskopoziomowe i wzmacniające wyższe poziomy dzięki sześciennemu zniekształceniu. Domyślne ustawienie to 300 Hz. Można to zmienić w kodzie tutaj.
Wzmocnienie wejściowe i próg sześcienny zniekształceń
Te parametry są używane przez filtr zniekształceń nieliniowych zastosowany do fala wejściowa, która tłumi amplitudę sygnałów o niższych częstotliwości zwiększają częstotliwość.
- Domyślna wartość współczynnika wzmocnienia wejściowego to 0,3.
- Domyślna wartość progu sześcianu to 0,1.
Zalecamy zmianę obu tych wartości jednocześnie. Można je znaleźć w kodzie tutaj.
Więcej informacji o funkcji stosowanej przez ten filtr znajdziesz tutaj: na temat implementacji, które są dostępne tutaj. Aby dowiedzieć się więcej o wpływie tych 2 parametrów na dane wyjściowe, zalecamy sporządzenie wykresu odpowiedzi częstotliwości i obserwację, odpowiedzi częstotliwości zmieniają się w zależności od wartości parametrów.
Wzmocnienie wyjściowe przy zniekształcaniu
Ten parametr steruje końcową amplitudą wibracji. To końcowa korzyść jest stosowany po łagodnym ograniczeniu, które ogranicza amplitudę wibracji do mniejszej niż 1. Jej wartość domyślna to 1.5. Można ją zmienić w kodzie. tutaj. Jeśli wibracje są zbyt subtelne, zwiększ wartość. Jeśli słyszysz stukania w mechanizmie wykonawczym, zmniejsz wartość.