Wdrażanie haptyki

Producenci urządzeń są ogólnie uważani za właścicieli prywatnych zasobów stworzonych dla każdego urządzenia. W związku z tym ich wysiłki inżynieryjne są często skoncentrowane na poszczególnych urządzeniach ; niewiele wysiłku idzie na spójność innych urządzeń w ekosystemie.

W przeciwieństwie do tego programiści starają się tworzyć aplikacje, które działają na wszystkich telefonach z systemem Android w ekosystemie, niezależnie od specyfikacji technicznych każdego urządzenia. Ta różnica w podejściu może powodować problem fragmentacji, na przykład możliwości sprzętowe niektórych telefonów nie spełniają oczekiwań określonych przez twórców aplikacji. Jeśli więc interfejsy API dotykowe działają na niektórych telefonach z Androidem, ale nie na innych, rezultatem jest niespójny ekosystem. Właśnie dlatego konfiguracja sprzętu odgrywa kluczową rolę w zapewnieniu, że producenci mogą wdrażać interfejsy API Android haptics na każdym urządzeniu.

Ta strona zawiera listę kontrolną krok po kroku, jak skonfigurować zgodność sprzętu w celu najlepszego wykorzystania haptycznych interfejsów API systemu Android.

Poniższy rysunek ilustruje budowanie wspólnej wiedzy między producentami urządzeń i programistami, co jest kluczowym krokiem w tworzeniu spójnego ekosystemu.

Schemat zastosowań dotykowych dla twórców aplikacji i producentów urządzeń

Rysunek 1. Budowanie wiedzy między producentami urządzeń a programistami

Lista kontrolna wdrożenia haptyki

  1. Implementuj stałe

    • Lista stałych do implementacji haptyki.
  2. Mapuj stałe między HAL i API

  3. Oceń sprzęt

    • Instrukcje dotyczące docelowych efektów dotykowych. Skorzystaj z tych instrukcji, aby szybko sprawdzić sprzęt.

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

Krok 1: Implementuj stałe

Wykonaj te testy, aby określić, czy Twoje urządzenie spełnia minimalne wymagania dotyczące obsługi dotykowej.

Schemat blokowy procesu wdrażania haptyki

Rysunek 2. Efekty wdrożenia

Schemat blokowy kroków wdrażania prymitywów

Rysunek 3. Implementacja prymitywów

Sprawdź stan wdrożenia następujących stałych dotykowych.

Stałe dotykowe Lokalizacje i podsumowania
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK Klasa VibrationEffect
Stałe dotykowe w VibrationEffect nie zawierają żadnego pojęcia zdarzeń wejściowych i nie mają elementów interfejsu użytkownika. Stałe zawierają pojęcie poziomów energii, takie jak EFFECT_CLICK i EFFECT_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 kompozycji
Stałe dotykowe w VibrationEffect.Composition mogą mieć skalowalną intensywność, która jest wywoływana przez addPrimitive(int primitiveId, float scale, int delay) .

Opisane poniżej drgania alternatywne zostaną wykonane na urządzeniach, które nie implementują stałych VibrationEffect . Zalecane jest zaktualizowanie tych konfiguracji, aby działały najlepiej na takich urządzeniach.

  1. EFFECT_CLICK

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

  2. EFFECT_HEAVY_CLICK

    Wibracje kształtu fali utworzone za pomocą VibrationEffect.createWaveform i czasów skonfigurowanych w frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern .

  3. EFFECT_DOUBLE_CLICK

    Wibracje kształtu fali utworzone za pomocą VibrationEffect.createWaveform i czasów (0, 30, 100, 30).

  4. EFFECT_TICK

    Wibracje kształtu fali utworzone za pomocą VibrationEffect.createWaveform i czasów skonfigurowanych w frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern .

Schemat blokowy etapów testowania dotykowej informacji zwrotnej

Rysunek 4. Implementacja stałych sprzężenia zwrotnego

Sprawdź stan następujących stałych opinii publicznej.

Stałe dotykowe Lokalizacje i podsumowania

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

Klasa HapticFeedbackConstants
Stałe dotykowe w HapticFeedbackConstants wspomagają zdarzenia wejściowe z pewnymi elementami interfejsu użytkownika, takimi jak KEYBOARD_PRESS i KEYBOARD_RELEASE , które są wywoływane przez performHapticFeedback() .

Krok 2: Mapuj stałe między HAL i API

Krok 2 przedstawia zalecane mapowania między publicznymi stałymi HAL a stałymi API. Jeżeli sprzęt oceniany w kroku 1 nie implementuje stałych HAL, wówczas krok 2 powinien być użyty do aktualizacji wzorców awaryjnych opisanych w kroku 1 w celu wygenerowania podobnych danych wyjściowych. Mapowanie jest wspomagane przez dwa różne modele domyślne.

  • Model dyskretny (prosty)

    • Kluczową zmienną tego modelu jest amplituda. Każda jednostka w HAL reprezentuje inną amplitudę dotyku.
    • Ten model jest minimalnym wymogiem potrzebnym do wdrożenia podstawowego dotykowego UX.
    • Bardziej zaawansowany dotykowy UX wymaga zaawansowanego sprzętu i zaawansowanego modelu (model ciągły).
  • Model ciągły (zaawansowany)

    • Tekstura i amplituda to kluczowe zmienne tego modelu. Każda jednostka w HAL reprezentuje różne tekstury dotykowe. Amplituda każdej jednostki HAL jest kontrolowana przez współczynnik skali ( S ).
    • Ten model wymaga zaawansowanego sprzętu. Jeśli producenci OEM chcą korzystać z zaawansowanego haptycznego UX z VibrationEffect.Composition (dla najlepszego wykorzystania najnowszych interfejsów haptycznych API), zaleca się zaimplementowanie swojego sprzętu przy użyciu tego modelu.

Model dyskretny

Zalecane jest mapowanie wszystkich stałych publicznych udostępnianych w interfejsie API z odpowiednimi stałymi warstwy HAL. Aby rozpocząć ten proces, sprawdź, ile przebiegów dotykowych o dyskretnej amplitudzie urządzenie może zdefiniować w HAL. Konkretne pytanie ustrukturyzowane wokół tego pojęcia wygląda tak: Ile jednoimpulsowych efektów dotykowych z odczuwalnymi przez człowieka różnicami amplitudy można zdefiniować w moim telefonie? Odpowiedź na to pytanie określa mapowanie.

Definiowanie stałych HAL jest procesem zależnym od sprzętu. Na przykład telefon klasy podstawowej może mieć tylko możliwości sprzętowe do wytworzenia pojedynczej fali dotykowej. Urządzenia z bardziej zaawansowanymi komponentami sprzętowymi wytwarzają szerszy zakres dyskretnych poziomów amplitudy i mogą definiować wiele haptycznych kształtów fal w warstwie HAL. Mapowanie stałych HAL-API przyjmuje stałą HAL (przy użyciu średniej amplitudy jako linii bazowej), a następnie rozmieszcza silniejsze lub słabsze efekty.

Wykres stałego zakresu HAL i amplitud sprzężenia zwrotnego

Rysunek 5. Zakres stałych HAL według amplitudy

Gdy zdefiniowana jest liczba stałych HAL z dyskretną amplitudą, nadszedł czas, aby odwzorować stałe HAL i API przez liczbę stałych HAL. Ten proces mapowania może podzielić pojedynczą impulsową stałą API na maksymalnie trzy dyskretne grupy poziomów amplitudy. Sposób segmentacji stałych API opiera się na zasadach UX dla towarzyszących zdarzeń wejściowych. Aby uzyskać więcej informacji, zobacz Haptics UX Design .

Model dyskretny do mapowania stałych HAL-API

Rysunek 6. Mapowanie stałych HAL-API: Model dyskretny

Jeśli Twoje urządzenie obsługuje tylko dwie stałe HAL z dyskretnymi amplitudami, rozważ połączenie stałych HAL o średnim i wysokim poziomie amplitudy. Przykładem tego pojęcia w praktyce może być mapowanie EFFECT_CLICK i EFFECT_HEAVY_CLICK na tę samą stałą HAL, która byłaby stałą HAL o średnim poziomie amplitudy. Jeśli Twoje urządzenie obsługuje tylko jedną stałą HAL z dyskretną amplitudą, rozważ połączenie wszystkich trzech poziomów w jeden.

Model ciągły

Model ciągły ze skalowalnością amplitudy można zastosować do zdefiniowania stałych HAL. Współczynnik skali ( S ) można zastosować do stałych HAL (na przykład HAL_H0 , HAL_H1 ), aby uzyskać przeskalowany HAL ( HAL_H0 x S ). W tym przypadku skalowany HAL jest mapowany w celu zdefiniowania stałych API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ), jak pokazano na rysunku 7. Dzięki zastosowaniu skalowalności amplitudy modelu ciągłego urządzenie może przechowywać niewielką liczbę stałych HAL z charakterystycznymi teksturami i dodaj zmiany amplitudy, dostosowując współczynnik skali ( S ). Producenci urządzeń mogą zdefiniować liczbę stałych HAL na podstawie liczby różnych tekstur dotykowych, które chcą zapewnić.

Stały zakres HAL według tekstury i amplitudy

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

Model ciągły dla mapowania stałych 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 dotykowe, a nie różne amplitudy; współczynnik skali ( S ) może skonfigurować amplitudę. Ponieważ jednak percepcja tekstury (na przykład ostrość) jest związana z percepcją czasu trwania i amplitudy, zalecane jest łączenie tekstury i współczynnika skali (w procesie projektowania mapowania HAL-API).

Rysunek 7 ilustruje mapowanie stałych przez zwiększenie zmienności od jednej warstwy HAL do wielu stałych API ze skalowalnością amplitudy.

Zwiększanie Wariacji 1

Zwiększanie Wariacji 2

Rysunek 9. Rosnąca zmienność wraz ze skalowalnością amplitudy

Uwaga: Powyższy rysunek ilustruje konkretną instancję mapowania stałych, więc konwencje nazewnictwa są hipotetyczne. Przeprowadzenie tego procesu jest unikalne dla każdego producenta urządzenia.

W przypadku wszystkich skalowalnych stałych interfejsu API, takich jak PRIMITIVE_TICK i PRIMITIVE_CLICK w VibrationEffect.Composition , poziom energii stałej interfejsu API zależy od parametru float scale zmiennoprzecinkowej, gdy stała interfejsu API jest zadeklarowana za pomocą addPrimitive(int primitiveID, float scale, int delay) . PRIMITIVE_TICK i PRIMITIVE_CLICK można zaprojektować z wyraźnym rozróżnieniem przy użyciu różnych stałych HAL. To podejście jest zalecane, jeśli chcesz urozmaicić teksturę .

Krok 3: Oceń sprzęt

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

Efekt 1: Predefiniowane krótkie stałe dotykowe

Stała VibrationEffect.EFFECT_CLICK jest efektem linii bazowej lub wspólnym mianownikiem w mapowaniu HAL-API podanym w kroku 2. Jest mapowana z najczęściej używanym efektem, HapticFeedbackConstants.KEYBOARD_PRESS . Ocena tego efektu pomaga określić gotowość urządzenia docelowego do wyraźnych wrażeń dotykowych .

Efekt 2: Krótki niestandardowy efekt dotykowy

VibrationEffect.createOneShot(20,255) służy do niestandardowych efektów dotykowych. W przypadku krótkich, pojedynczych impulsów niestandardowych zalecanym maksymalnym progiem określającym czas trwania jest 20 ms. Pojedynczy impuls dłuższy niż 20 ms nie jest zalecany, ponieważ jest odbierany jako brzęcząca wibracja .

Przebieg krótkiego niestandardowego efektu dotykowego

Rysunek 10. Krótki niestandardowy efekt dotykowy

Efekt 3: Długi niestandardowy efekt dotykowy ze zmiennością amplitudy

VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) jest przeznaczona dla długich efektów niestandardowych ze zmiennością amplitudy. Zdolność do wytwarzania różnych amplitud dla niestandardowych efektów dotykowych jest jednym ze wskaźników oceny możliwości urządzenia w zakresie bogatych wrażeń dotykowych . Zalecane timings [] i amplitudes [] to odpowiednio {500, 500} i {128, 255} , co przedstawia rosnący trend amplitudy od 50% do 100%, z częstotliwością próbkowania 500 ms.

Kształt fali efektu dotykowego ze zmiennością amplitudy

Rysunek 11. Długi niestandardowy efekt dotykowy ze zmiennością amplitudy

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

Schemat subiektywnej oceny efektu dotykowego

Rysunek 12. Ocena badanego efektu dotykowego 1, 2 i 3

Wykonywanie subiektywnej oceny

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

Konkretne pytanie ustrukturyzowane wokół tego pojęcia wygląda tak: czy urządzenie może wywołać łatwo dostrzegalne efekty dotykowe dla użytkowników zgodnie z oczekiwaniami? Odpowiedź na to pytanie pomoże Ci uniknąć wadliwych elementów dotykowych , w tym niedostrzegalnych elementów dotykowych, których użytkownicy nie mogą wyczuć, lub niezamierzonych elementów dotykowych, w których przebiegi nie tworzą wzorów zgodnie z zamierzeniami.