Producenci urządzeń są ogólnie uważani za właścicieli prywatnych zasobów utworzonych dla każdego urządzenia. W związku z tym ich wysiłki inżynieryjne często koncentrują się na poszczególnych urządzeniach ; niewielki lub żaden wysiłek nie idzie w kierunku spójności innych urządzeń w ekosystemie.
W przeciwieństwie do tego programiści starają się tworzyć aplikacje, które działają na wszystkich telefonach z Androidem w ekosystemie, niezależnie od specyfikacji technicznych każdego urządzenia. Ta różnica w podejściu może powodować problem z fragmentacją, na przykład możliwości sprzętowe niektórych telefonów nie odpowiadają oczekiwaniom określonym przez twórców aplikacji. Jeśli więc dotykowe interfejsy API działają na niektórych telefonach z Androidem, a na innych nie, rezultatem jest niespójny ekosystem. Dlatego konfiguracja sprzętowa odgrywa kluczową rolę w zapewnieniu producentom możliwości implementacji dotykowych interfejsów API systemu Android na każdym urządzeniu.
Ta strona zawiera listę kontrolną krok po kroku umożliwiającą skonfigurowanie zgodności sprzętu w celu najlepszego wykorzystania dotykowych 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.
Rysunek 1. Budowanie wiedzy pomiędzy producentami urządzeń a programistami
Lista kontrolna wdrożenia haptyki
- Lista stałych do implementacji haptyki.
Odwzoruj stałe między HAL a API
- Mapowanie zaleceń między publicznymi stałymi API (nazwanymi symbolami zastępczymi w ramach) a stałymi HAL, które implementują symbole zastępcze.
- Zobacz zasady projektowania, aby kierować zalecanym mapowaniem , aby dowiedzieć się więcej o tym procesie.
- Instrukcje dotyczące docelowych efektów dotykowych. Skorzystaj z tych instrukcji, aby szybko sprawdzić swój sprzęt.
Poniżej omówimy każdy z tych kroków bardziej szczegółowo.
Krok 1: Zaimplementuj stałe
Wykonaj te kontrole, aby określić, czy Twoje urządzenie spełnia minimalne wymagania dotyczące implementacji funkcji dotykowych.
Rysunek 2. Efekty wdrożenia
Rysunek 3. Implementacja prymitywów
Sprawdź stan implementacji następujących stałych dotykowych.
Stałe dotykowe | Lokalizacje i streszczenia |
---|---|
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. Zamiast tego stałe obejmują 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 | Klasa VibrationEffect.Composition 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 alternatywne wibracje będą wykonywane na urządzeniach, które nie implementują stałych VibrationEffect
. Zaleca się aktualizację tych konfiguracji, aby działały najlepiej na takich urządzeniach.
EFFECT_CLICK
Wibracje Waveform utworzone za pomocą
VibrationEffect.createWaveform
i czasy skonfigurowane wframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
.EFFECT_HEAVY_CLICK
Wibracje kształtu fali utworzone za pomocą
VibrationEffect.createWaveform
i czasy skonfigurowane wframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern
.EFFECT_DOUBLE_CLICK
Wibracje Waveform utworzone za pomocą
VibrationEffect.createWaveform
i timingi (0, 30, 100, 30).EFFECT_TICK
Wibracje Waveform utworzone za pomocą
VibrationEffect.createWaveform
i czasy skonfigurowane wframeworks/base/core/res/res/values/config.xml##config_clockTickVibePattern
.
Rysunek 4. Implementacja stałych sprzężenia zwrotnego
Sprawdź stan następujących stałych opinii publicznej.
Stałe dotykowe | Lokalizacje i streszczenia |
---|---|
| 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: Odwzoruj stałe między HAL a API
Krok 2 przedstawia zalecane mapowania między publicznymi stałymi HAL a stałymi API. Jeśli sprzęt oceniony w kroku 1 nie implementuje stałych HAL, należy użyć kroku 2 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)
- Amplituda jest kluczową zmienną tego modelu. Każda jednostka w HAL reprezentuje inną amplitudę haptyczną.
- Ten model to minimalne wymaganie potrzebne do wdrożenia podstawowego haptic UX.
- Bardziej zaawansowany dotykowy interfejs użytkownika 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 warstwie 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
(w celu najlepszego wykorzystania najnowszych haptycznych interfejsów API), zaleca się wdrożenie ich sprzętu przy użyciu tego modelu.
- Tekstura i amplituda to kluczowe zmienne tego modelu. Każda jednostka w warstwie HAL reprezentuje różne tekstury dotykowe. Amplituda każdej jednostki HAL jest kontrolowana przez współczynnik skali (
Model dyskretny
Zalecane jest mapowanie wszystkich stałych publicznych udostępnianych w interfejsie API z odpowiednimi stałymi HAL. Aby rozpocząć ten proces, dowiedz się, ile fal haptycznych o dyskretnej amplitudzie urządzenie może zdefiniować w warstwie HAL. Konkretne pytanie zbudowane wokół tego pojęcia wygląda następująco: Ile jednoimpulsowych efektów dotykowych z dostrzegalnymi przez człowieka różnicami amplitudy można zdefiniować w moim telefonie? Od odpowiedzi na to pytanie zależy 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 przebiegów dotykowych w warstwie HAL. Mapowanie stałej HAL-API bierze stałą HAL (wykorzystując średnią amplitudę jako linię bazową), a następnie porządkuje mocniejsze lub słabsze efekty.
Rysunek 5. Zakres stałej HAL według amplitudy
Po zdefiniowaniu liczby stałych HAL z dyskretną amplitudą nadszedł czas na odwzorowanie stałych HAL i API przez liczbę stałych HAL. Ten proces mapowania może podzielić pojedynczą stałą API impulsu na maksymalnie trzy dyskretne grupy poziomów amplitudy. Sposób segmentacji stałych API opiera się na zasadach UX dotyczących towarzyszących zdarzeń wejściowych. Aby uzyskać więcej informacji, zobacz Projektowanie dotykowe UX .
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 poziomu średniej i wysokiej amplitudy. Przykładem tego pojęcia w praktyce byłoby odwzorowanie EFFECT_CLICK
i EFFECT_HEAVY_CLICK
na tę samą stałą HAL, która byłaby stałą HAL średniego poziomu 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
Ciągły model ze skalowalnością amplitudy może być zastosowany do określenia stałych HAL. Współczynnik skali ( S
) można zastosować do stałych HAL (na przykład HAL_H0
, HAL_H1
) w celu utworzenia skalowanej warstwy HAL ( HAL_H0
x S
). W tym przypadku skalowana warstwa HAL jest mapowana w celu zdefiniowania stałych API ( HAL_H0
x S1
= H0S1
= EFFECT_TICK
), jak pokazano na rysunku 7. Wykorzystując skalowalność 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ć.
Rysunek 7. Zakres stałej HAL według tekstury (HAL_H0) i skali amplitudy (S)
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 konfigurować amplitudę. Ponieważ jednak postrzeganie tekstury (na przykład ostrości) jest związane z postrzeganiem czasu trwania i amplitudy, zaleca się łączenie tekstury i współczynnika skali (w procesie projektowania mapowania HAL-API).
Rysunek 7 ilustruje mapowanie stałych poprzez zwiększanie zmienności od jednej HAL do wielu stałych API ze skalowalnością amplitudy.
Rysunek 9. Rosnąca zmienność ze skalowalnością amplitudy
Uwaga: Powyższy rysunek ilustruje konkretny przykład stałego mapowania, więc konwencje nazewnictwa są hipotetyczne. Wykonanie tego procesu jest unikalne dla każdego producenta urządzenia.
Dla wszystkich skalowalnych stałych API, takich jak PRIMITIVE_TICK
i PRIMITIVE_CLICK
w VibrationEffect.Composition
, poziom energii stałej API zależy od parametru float scale
, gdy stała API jest deklarowana przez addPrimitive(int primitiveID, float scale, int delay)
. PRIMITIVE_TICK
i PRIMITIVE_CLICK
można zaprojektować z wyraźnym rozróżnieniem, używając różnych stałych HAL. To podejście jest zalecane, jeśli chcesz dodać wariację do tekstury .
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 odwzorowana z najczęściej używanym efektem, HapticFeedbackConstants.KEYBOARD_PRESS
. Ocena tego efektu pomaga określić gotowość urządzenia docelowego na wyraźne wrażenia dotykowe .
Efekt 2: Krótki niestandardowy efekt dotykowy
VibrationEffect.createOneShot(20,255)
dotyczy niestandardowych efektów dotykowych. W przypadku krótkich, pojedynczych impulsów niestandardowych zalecanym maksymalnym progiem definiują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 .
Rysunek 10. Krótki niestandardowy efekt dotykowy
Efekt 3: Długi niestandardowy efekt haptyczny ze zmiennością amplitudy
Stała 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 efektów dotykowych. Zalecane timings []
i amplitudes []
wynoszą odpowiednio {500, 500}
i {128, 255}
, co przedstawia rosnący trend amplitudy od 50% do 100%, przy częstotliwości próbkowania 500 ms.
Rysunek 11. Długi niestandardowy efekt haptyczny 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.
Rysunek 12. Ocena efektu dotykowego przez osobę badaną 1, 2 i 3
Przeprowadzenie subiektywnej oceny
Aby szybko sprawdzić spójność, najpierw przeprowadź subiektywną ocenę. Celem subiektywnej oceny jest obserwacja amplitudy efektów haptycznych w celu ustalenia, czy urządzenie może generować haptykę o amplitudach dostrzegalnych przez człowieka.
Konkretne pytanie zorganizowane wokół tego pojęcia wygląda następująco: Czy urządzenie może wytwarzać łatwo dostrzegalne efekty dotykowe dla użytkowników zgodnie z oczekiwaniami? Odpowiedź na to pytanie pomaga uniknąć nieudanych wrażeń dotykowych , w tym niedostrzegalnych wrażeń dotykowych, których użytkownicy nie mogą wyczuć, lub niezamierzonych wrażeń dotykowych, w przypadku których kształty fal nie tworzą wzorców zgodnie z zamierzeniami.