Zastosuj czujnik haptyczny

Producenci urządzeń są zwykle uznawani za właścicieli zasobów prywatnych utworzonych dla poszczególnych urządzeń. Dlatego ich wysiłki często koncentrują się na konkretnym urządzeniu. Niewiele wysiłku wkłada się w ujednolicenie innych urządzeń w ekosystemie.

Wręcz przeciwnie, deweloperzy starają się tworzyć aplikacje, które działają na wszystkich telefonach z Androidem w ekosystemie, niezależnie od specyfikacji technicznej poszczególnych urządzeń. Ta różnica w podejściu może powodować problemy z fragmentacją, na przykład gdy możliwości sprzętowe niektórych telefonów nie odpowiadają oczekiwaniom deweloperów aplikacji. Jeśli interfejsy API haptycznych funkcji działają na niektórych telefonach z Androidem, ale nie na innych, ekosystem nie będzie spójny. Dlatego konfiguracja sprzętowa odgrywa kluczową rolę w zapewnieniu, że producenci mogą wdrażać interfejsy API haptycznych funkcji Androida na każdym urządzeniu.

Na tej stronie znajdziesz listę kontrolną z instrukcjami krok po kroku, które pomogą Ci skonfigurować zgodność sprzętu z interfejsami API haptycznych Androida, aby w pełni korzystać z tych interfejsów.

Rysunek poniżej pokazuje tworzenie wspólnej wiedzy między producentami urządzeń a deweloperami, co jest kluczowym krokiem w tworzeniu spójnego ekosystemu.

Diagram przedstawiający przypadki użycia haptyki przez deweloperów aplikacji i producentów urządzeń

Rysunek 1. Udostępnianie informacji producentom urządzeń i deweloperom

Lista kontrolna implementacji reakcji na dotyk

  1. Stosowanie stałych

    • Lista stałych wartości do implementacji haptyki.
  2. Mapowanie stałych między HAL i API

    • Zalecenia dotyczące mapowania między publicznymi stałymi interfejsu API (nazwanymi w ramach miejscami zastępczymi) a stałymi HAL, które implementują te miejsca zastępcze.
    • Aby dowiedzieć się więcej o tym procesie, zapoznaj się z zasadami projektowania rekomendowanych map.
  3. Sprawdzanie sprzętu

    • Instrukcje dotyczące kierowania efektów haptycznych Wykonaj te instrukcje, aby szybko sprawdzić sprzęt.

Poniżej omówimy każdy z tych kroków.

Krok 1. Wdróż stałą

Wykonaj te testy, by określić, czy Twoje urządzenie spełnia minimalne wymagania dotyczące czujnika haptycznego.

Schemat implementacji haptyki

Rysunek 2. Zastosowanie efektów

Schemat blokowy czynności implementowania działań podstawowych

Rysunek 3. Implementowanie elementów podstawowych

Sprawdź stan implementacji tych stałych haptycznych.

Stałe haptyczne Lokalizacje i streszczenia
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK VibrationEffect class
Konstante haptyczne w VibrationEffect nie zawierają żadnych informacji o zdarzeniach wejściowych i nie mają elementów interfejsu użytkownika. Stałe wartości zawierają informacje o poziomach energii, takie jak EFFECT_CLICKEFFECT_HEAVY_CLICK, które są wywoływane przez createPredefined().
PRIMITIVE_TICK, PRIMITIVE_CLICK, PRIMITIVE_LOW_TICK>, PRIMITIVE_SLOW_RISE, PRIMITIVE_QUICK_RISE, PRIMITIVE_QUICK_FALL, PRIMITIVE_SPIN, PRIMITIVE_THUD VibrationEffect.Composition class
Konstante haptyczne w VibrationEffect.Composition mogą mieć skalowalny poziom natężenia, który jest wywoływany przez addPrimitive(int primitiveId, float scale, int delay).

Alternatywne wibracje opisane poniżej są wykonywane na urządzeniach, które nie mają wdrożonych stałych VibrationEffect. Zalecamy zaktualizowanie tych konfiguracji, aby działały jak najlepiej na takich urządzeniach.

  1. EFFECT_CLICK

    Wibracje w formie fali utworzone za pomocą VibrationEffect.createWaveform i czasów ustawionych w frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  2. EFFECT_HEAVY_CLICK

    Wibracje w formie fali utworzone za pomocą VibrationEffect.createWaveform i czasów ustawionych w frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

  3. EFFECT_DOUBLE_CLICK

    Wibracje w postaci fali utworzone za pomocą VibrationEffect.createWaveform i czasów trwania (0, 30, 100, 30).

  4. EFFECT_TICK

    Wibracje w formie fali utworzone za pomocą VibrationEffect.createWaveform i czasów ustawionych w frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Schemat blokowy czynności związanych z testowaniem reakcji haptycznej

Rysunek 4. Implementacja stałych wartości opinii

Sprawdź stan tych publicznych stałych informacji zwrotnych.

Stałe dotyczące haptyki Lokalizacje i streszczenia
CLOCK_TICK, CONTEXT_CLICK, KEYBOARD_PRESS, KEYBOARD_RELEASE, KEYBOARD_TAP, LONG_PRESS, TEXT_HANDLE_MOVE, VIRTUAL_KEY, VIRTUAL_KEY_RELEASE, CONFIRM, REJECT, GESTURE_START, GESTURE_END HapticFeedbackConstants
Stałe haptyczne HapticFeedbackConstants wspomagania zdarzeń wejściowych przez określone elementy interfejsu, np. KEYBOARD_PRESS i KEYBOARD_RELEASE, które są wywoływane przez performHapticFeedback().

Krok 2. Zmapuj stałe między HAL a interfejsem API

Krok 2 przedstawia zalecane mapowania publicznych stałych HAL na stałe interfejsu API. Jeśli sprzęt oceniony w kroku 1 nie implementuje stałych wartości HAL, należy wykonać krok 2, aby zaktualizować wzorce zastępcze opisane w kroku 1 i w ten sposób wygenerować podobne dane wyjściowe. Mapowanie jest wspomagane przez 2 różne modele domyślne.

  • Model dyskretny (prosty)

    • Amplituda jest kluczową zmienną tego modelu. Każdy element w HAL reprezentuje inną amplitudę reakcji haptycznych.
    • Ten model jest minimalnym wymaganiem potrzebnym do wdrożenia podstawowej haptycznej interakcji.
    • Bardziej zaawansowane wrażenia haptyczne wymagają zaawansowanego sprzętu i zaawansowanego modelu (modelu ciągłego).
  • Model ciągły (zaawansowany)

    • Tekstura i amplituda to kluczowe zmienne tego modelu. Każdy element w HAL reprezentuje różne tekstury haptyczne. Amplituda każdego elementu HAL jest kontrolowana przez współczynnik skali (S).
    • Ten model wymaga zaawansowanego sprzętu. Jeśli OEM chce korzystać z zaawansowanych haptycznych wrażeń użytkownika w VibrationEffect.Composition (aby optymalnie korzystać z najnowszych interfejsów API haptycznych), zalecamy implementację sprzętu za pomocą tego modelu.

Model dyskretny

Zalecamy mapowanie wszystkich stałych publicznych podanych w interfejsie API z odpowiednimi stałymi HAL. Aby rozpocząć ten proces, sprawdź, ile fal haptycznych z dyskretyczną amplitudą urządzenie może zdefiniować w interfejsie HAL. Konkretne pytanie sformułowane na podstawie tego zagadnienia może wyglądać tak: Ile efektów haptycznych jednoimpulsowych z różnicami amplitudy, które są wyczuwalne dla człowieka, można zdefiniować na moim telefonie? Odpowiedź na to pytanie określa mapowanie.

Definiowanie stałych HAL jest procesem zależnym od sprzętu. Na przykład telefon podstawowy może mieć tylko możliwości sprzętowe umożliwiające wygenerowanie pojedynczej fali haptycznej. Urządzenia z bardziej zaawansowanymi komponentami sprzętowymi zapewniają szerszy zakres poziomów amplitudy i mogą definiować wiele przebiegów haptycznych w HAL. Mapowanie stałych wartości HAL na interfejs API polega na tym, że najpierw ustala się stałą wartość HAL (korzystając z średniej amplitudy jako wartości odniesienia), a potem na tej podstawie ustala się silniejsze lub słabsze efekty.

Diagram przedstawiający zakres i amplitudy sprzężenia zwrotnego HAL

Rysunek 5. Stały zakres HAL według amplitudy

Po zdefiniowaniu liczby stałych HAL z dyskretyczną amplitudą nadszedł czas na mapowanie stałych HAL i API według liczby stałych HAL. Ten proces mapowania może podzielić jedną stałą interfejsu API impulsu na maksymalnie 3 oddzielne grupy poziomów amplitudy. Sposób podziału stałych interfejsu API jest oparty na zasadach UX dotyczących towarzyszących zdarzeń wejściowych. Więcej informacji znajdziesz w artykule Haptics UX design (w języku angielskim).

Model dyskretny do mapowania stałych wartości HAL-API

Rysunek 6. Mapowanie stałe HAL-API: model dyskretny

Jeśli Twoje urządzenie obsługuje tylko 2 stałe wartości HAL z dyskretnymi amplitudami, rozważ połączenie stałych wartości HAL z poziomem amplitudy Medium i High. W praktyce może to być na przykład mapowanie wartości EFFECT_CLICK i EFFECT_HEAVY_CLICK na tę samą stałą HAL, która jest stałą wartością HAL średniej amplitudy. Jeśli Twoje urządzenie obsługuje tylko jedną stałą HAL z dyskretną amplitudą, rozważ złączenie wszystkich 3 poziomów w jeden.

Model ciągły

Ciągły model z możliwością skalowania amplitudy można stosować do definiowania stałych wartości HAL. Do stałych HAL można zastosować współczynnik skali (S), np. HAL_H0, HAL_H1, aby utworzyć skalowaną wartość HAL (HAL_H0 x S). W tym przypadku skalowana wartość HAL jest mapowana w celu zdefiniowania stałych interfejsu API (HAL_H0 x S1 = H0S1 = EFFECT_TICK), jak widać na ilustracji 7. Dzięki skalowalności amplitudy w modelu ciągłym urządzenie może przechowywać niewielką liczbę stałych wartości HAL z charakterystycznymi teksturami i dodawać zmiany amplitudy przez dostosowywanie współczynnika skalowania (S). Producenci urządzeń mogą definiować liczbę stałych wartości HAL na podstawie tego, ile różnych tekstur haptycznych chcą udostępnić.

Zakres stałych wartości HAL według tekstury i amplitudy

Rysunek 7. Zakres stałej HAL według tekstury (HAL_H0) i skali amplitudy (S)

Ciągły model do mapowania stałych wartości HAL-API

Rysunek 8. Mapowanie stałych HAL-API: model ciągły

W modelu ciągłym różne stałe HAL reprezentują różne tekstury haptyczne, a nie różne amplitudy. Współczynnik skali (S) może konfigurować amplitudę. Jednak ze względu na to, że postrzeganie tekstury (np. ostrość) jest powiązane z postrzeganiem czasu trwania i amplitudy, zaleca się połączenie tekstury i współczynnika skali (w procesie projektowania mapowania interfejsu HAL-API).

Rysunek 7 przedstawia mapowanie stałych wartości przez zwiększanie zmienności z jednego HAL do wielu stałych wartości API ze skalowalnością amplitudy.

Zwiększenie wariantu 1

Wariancja rosnąca 2

Rysunek 9. Większa zmienność dzięki skalowalności amplitudy

W przypadku wszystkich skalowanych stałych interfejsu API, takich jak PRIMITIVE_TICKPRIMITIVE_CLICKVibrationEffect.Composition, poziom energii stałej interfejsu API zależy od parametru float scale, gdy stała interfejsu API jest zadeklarowana za pomocą addPrimitive(int primitiveID, float scale, int delay). Funkcje PRIMITIVE_TICKPRIMITIVE_CLICK można zaprojektować w sposób umożliwiający wyraźne rozróżnienie ich za pomocą różnych stałych wartości HAL. Zalecamy to podejście, jeśli chcesz dodać wariację tekstury.

Krok 3. Sprawdź sprzęt

Ocena sprzętu obejmuje zdefiniowanie 3 efektów haptycznych oznaczonych etykietami Efekty 1, 2 i 3 dla tej konkretnej oceny.

Efekt 1. Wstępnie zdefiniowane krótkie stałe haptyczne

Stała VibrationEffect.EFFECT_CLICKto efekt bazowy lub wspólny mianownik w mapowaniu HAL-API podane w kroku 2. Jest on zmapowany z najczęściej używanym efektem, HapticFeedbackConstants.KEYBOARD_PRESS. Ocena tego efektu pomaga określić, czy urządzenie docelowe jest gotowe do jasnych wibracji.

Efekt 2. Krótki niestandardowy efekt haptyczny

Stała VibrationEffect.createOneShot(20,255) służy do niestandardowych efektów haptycznych. W przypadku krótkich, pojedynczych niestandardowych impulsów zalecany maksymalny próg określający czas trwania to 20 ms. Nie zalecamy stosowania pojedynczego impulsu dłuższego niż 20 ms, ponieważ jest on odbierany jako wibracja drażniąca ucho.

Fala krótkiego niestandardowego efektu haptycznego

Rysunek 10. Krótki niestandardowy efekt haptyczny

Efekt 3. Długi niestandardowy efekt haptyczny z wahaniem amplitudy

Stała VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) służy do długich efektów niestandardowych z wahaniami amplitudy. Możliwość generowania niestandardowych efektów haptycznych o zmiennej amplitudzie to jeden ze wskaźników pozwalających ocenić, czy urządzenie może obsługiwać zaawansowane czujniki haptyczne. Zalecane wartości timings [] i amplitudes [] to odpowiednio {500, 500} i {128, 255}, co wykazują wzrost amplitudy z 50% do 100% z częstotliwością próbkowania 500 ms.

Fala efektu haptycznego z wahaniem amplitudy

Rysunek 11. Długi niestandardowy efekt haptyczny z wahaniem amplitudy

Aby sprawdzić możliwości sprzętowe kontroli amplitudy dla efektu 3, użyj metody Vibrator.hasAmplitudeControl(). Wynik musi być true, aby można było go wykonać VibrationEffect.createWaveform z zmienną amplitudą zgodnie z oczekiwaniami.

Schemat blokowy subiektywnej oceny efektu haptycznego

Rysunek 12. Ocena przez badanego efektu haptycznego 1, 2 i 3

Przeprowadź ocenę subiektywną

Aby szybko sprawdzić spójność, najpierw przeprowadź ocenę subiektywną. Celem subiektywnej oceny jest obserwacja amplitudy efektów haptycznych w celu określenia, czy urządzenie może generować haptykę o amplitudoniach wyczuwalnych przez człowieka.

Konkretne pytanie oparte na tym pojęciu może wyglądać tak: Czy urządzenie może generować wyczuwalne efekty haptyczne zgodnie z oczekiwaniami użytkowników? Odpowiedź na to pytanie pomoże Ci uniknąć nieprawidłowej haptyki, w tym niewyczuwalnej haptyki, której użytkownicy nie mogą poczuć, lub niezamierzonej haptyki, w której przypadku przebiegi fali nie generują pożądanych wzorców.

Przeprowadź zaawansowaną ocenę

Zdecydowanie zalecamy przeprowadzanie zaawansowanych ocen jakości. Zaawansowane oceny jakości opisują wymierne atrybuty reakcji haptycznych, co pozwala wdrożyć czujniki haptyczne jakościowe. Po zakończeniu procesu producenci urządzeń powinni mieć możliwość diagnozowania bieżącego stanu haptycznego, co oznacza, że mogą wyznaczać cele, aby poprawić ogólną jakość. Zobacz ocenę sprzętu.