Producenci urządzeń są ogólnie uważani za właścicieli prywatnych aktywów tworzonych dla każdego urządzenia. W związku z tym ich wysiłki inżynieryjne często skupiają się na poszczególnych urządzeniach ; Niewielki lub żaden wysiłek poświęcany jest 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 fragmentacji, 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 interfejsy API dotykowe działają na niektórych telefonach z Androidem, ale na innych nie, efektem jest niespójny ekosystem. Właśnie dlatego konfiguracja sprzętu odgrywa kluczową rolę w zapewnieniu producentom możliwości wdrożenia interfejsów API dotykowych systemu Android na każdym urządzeniu.
Na tej stronie znajduje się lista kontrolna, która krok po kroku umożliwia skonfigurowanie zgodności sprzętu w celu najlepszego wykorzystania interfejsów API systemu Android.
Poniższy rysunek ilustruje budowanie wspólnej wiedzy pomię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 funkcji dotykowych
- Lista stałych do implementacji haptyki.
Mapuj stałe pomiędzy HAL i API
- Zalecenia mapowania między publicznymi stałymi API (nazwanymi symbolami zastępczymi w strukturze) a stałymi HAL, które implementują symbole zastępcze.
- Zobacz Zasady projektowania, aby zapoznać się z zalecanym mapowaniem, aby dowiedzieć się więcej o tym procesie.
- Instrukcje dotyczące docelowych efektów dotykowych. Skorzystaj z tych instrukcji, aby przeprowadzić szybkie sprawdzenie sprzętu.
Poniżej omówimy każdy z tych kroków bardziej szczegółowo.
Krok 1: Zaimplementuj stałe
Wykonaj te kontrole, aby ustalić, czy Twoje urządzenie spełnia minimalne wymagania dotyczące wdrożenia funkcji dotykowych.
Rysunek 2. Efekty wdrożenia
Rysunek 3. Implementacja prymitywów
Sprawdź status implementacji 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 obejmują żadnego pojęcia zdarzeń wejściowych i nie mają elementów interfejsu użytkownika. Stałe obejmują zamiast tego pojęcie poziomów energii, takie jak EFFECT_CLICK i EFFECT_HEAVY_CLICK , które są wywoływane przez funkcję 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 są wykonywane na urządzeniach, które nie implementują stałych VibrationEffect
. Zaleca się aktualizację tych konfiguracji, aby zapewnić najlepszą wydajność na takich urządzeniach.
EFFECT_CLICK
Wibracje w kształcie fali utworzone za pomocą
VibrationEffect.createWaveform
i taktowania skonfigurowane wframeworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern
.EFFECT_HEAVY_CLICK
Wibracje w kształcie fali utworzone za pomocą
VibrationEffect.createWaveform
i taktowania skonfigurowane wframeworks/base/core/res/res/values/config.xml##config_longPressVibePattern
.EFFECT_DOUBLE_CLICK
Wibracje w kształcie fali utworzone za pomocą
VibrationEffect.createWaveform
i czasów (0, 30, 100, 30).EFFECT_TICK
Wibracje w kształcie fali utworzone za pomocą
VibrationEffect.createWaveform
i taktowania 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 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 haptyczne w HapticFeedbackConstants wspomagają zdarzenia wejściowe z określonymi 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 pomiędzy publicznymi stałymi HAL i stałymi API. Jeśli sprzęt oceniany w kroku 1 nie implementuje stałych HAL, należy zastosować krok 2 do aktualizacji wzorców awaryjnych opisanych w kroku 1 w celu wygenerowania podobnych wyników. Mapowanie jest wspomagane przez dwa różne modele domyślne.
Model dyskretny (prosty)
- Amplituda jest kluczową zmienną w tym modelu. Każda jednostka w warstwie HAL reprezentuje inną amplitudę dotykową.
- Model ten stanowi minimalne wymaganie potrzebne do wdrożenia podstawowego haptycznego UX.
- Bardziej zaawansowany haptyczny 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 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 interfejsów haptycznych 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 (
Dyskretny model
Zalecane jest mapowanie wszystkich stałych publicznych udostępnianych w API na odpowiednie stałe HAL. Aby rozpocząć ten proces, dowiedz się, ile przebiegów dotykowych o dyskretnej amplitudzie urządzenie może zdefiniować w warstwie HAL. Konkretne pytanie oparte na tym pojęciu wygląda następująco: Ile efektów dotykowych pojedynczego impulsu z odczuwalnymi przez człowieka różnicami w amplitudzie można zdefiniować w moim telefonie? Odpowiedź na to pytanie determinuje mapowanie.
Definiowanie stałych HAL jest procesem zależnym od sprzętu. Na przykład telefon podstawowy może mieć jedynie możliwości sprzętowe umożliwiające wygenerowanie pojedynczego przebiegu dotykowego. 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łych HAL-API pobiera stałą HAL (używając średniej amplitudy jako linii bazowej), a następnie na tej podstawie organizuje silniejsze lub słabsze efekty.
Rysunek 5. Stały zakres HAL według amplitudy
Po zdefiniowaniu liczby stałych HAL o dyskretnej amplitudzie, czas na odwzorowanie stałych HAL i API na liczbę stałych HAL. Ten proces mapowania może podzielić stałą API pojedynczego impulsu na maksymalnie trzy odrębne 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 Projekt Haptics 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 o średnim i wysokim poziomie amplitudy. Przykładem tego pojęcia w praktyce byłoby mapowanie EFFECT_CLICK
i EFFECT_HEAVY_CLICK
na tę samą stałą HAL, która byłaby stałą HAL na poziomie średniej 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. Do stałych HAL można zastosować współczynnik skali ( S
) (na przykład HAL_H0
, HAL_H1
) w celu uzyskania skalowanego 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. Korzystając ze 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ą definiować liczbę stałych HAL w oparciu o liczbę różnych tekstur dotykowych, które chcą zapewnić.
Rysunek 7. Zakres stałej HAL według tekstury (HAL_H0) i skala 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 skonfigurować amplitudę. Ponieważ jednak percepcja tekstury (na przykład ostrość) jest powiązana z percepcją czasu trwania i amplitudy, zalecane jest łączenie tekstury i współczynnika skali (w procesie projektowania mapowania HAL-API).
Rysunek 7 ilustruje ciągłe mapowanie poprzez zwiększenie odchylenia od jednej HAL do wielu stałych API ze skalowalnością amplitudy.
Rysunek 9. Rosnąca zmienność ze skalowalnością amplitudy
W przypadku 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 poprzez 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ć urozmaicenie do tekstury .
Krok 3: Oceń sprzęt
Ocena sprzętu obejmuje zdefiniowanie trzech efektów dotykowych, oznaczonych jako Efekty 1, 2 i 3 w przypadku tej konkretnej oceny.
Efekt 1: Predefiniowane krótkie stałe dotykowe
Stała VibrationEffect.EFFECT_CLICK
jest efektem bazowym lub wspólnym mianownikiem w mapowaniu HAL-API podanym w kroku 2. Jest ona mapowana przy użyciu najczęściej używanego efektu, HapticFeedbackConstants.KEYBOARD_PRESS
. Ocena tego efektu pomaga określić gotowość urządzenia docelowego do uzyskania wyraźnego efektu dotykowego .
Efekt 2: Krótki, niestandardowy efekt dotykowy
Stała 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 .
Rysunek 10. Krótki, niestandardowy efekt dotykowy
Efekt 3: Długi, niestandardowy efekt dotykowy ze zmianą amplitudy
Stała VibrationEffect.createWaveform(timings[], amplitudes[], int repeat)
jest przeznaczona dla długich efektów niestandardowych ze zmianami amplitudy. Możliwość wytwarzania różnych amplitud dla niestandardowych efektów dotykowych jest jednym ze wskaźników oceny możliwości urządzenia w zakresie bogatej obsługi dotykowej . Zalecane timings []
i amplitudes []
to odpowiednio {500, 500}
i {128, 255}
, co przedstawia tendencję rosnącą amplitudy od 50% do 100%, przy częstotliwości próbkowania 500 ms.
Rysunek 11. Długi, niestandardowy efekt dotykowy ze zmianą amplitudy
Aby sprawdzić możliwości sprzętowe kontroli amplitudy dla Effect 3 należy skorzystać z metody Vibrator.hasAmplitudeControl()
. Wynik musi być true
, aby zgodnie z zamierzeniami można było wykonać VibrationEffect.createWaveform
z różną amplitudą.
Rysunek 12. Ocena podmiotowa efektu dotykowego 1, 2 i 3
Dokonaj subiektywnej oceny
Aby szybko sprawdzić spójność, przeprowadź najpierw subiektywną ocenę. Celem subiektywnej oceny jest obserwacja amplitudy efektów dotykowych w celu ustalenia, czy urządzenie może generować wrażenia dotykowe o amplitudach wyczuwalnych przez człowieka.
Konkretne pytanie skonstruowane wokół tego pojęcia wygląda następująco: Czy urządzenie może wytwarzać dla użytkowników łatwo zauważalne efekty dotykowe zgodnie z oczekiwaniami? Odpowiedź na to pytanie pomoże Ci uniknąć nieudanych efektów dotykowych , w tym niezauważalnych efektów dotykowych, których użytkownicy nie mogą wyczuć, lub niezamierzonych efektów dotykowych, w przypadku których przebiegi nie tworzą wzorów zgodnie z zamierzeniami.