Haptik implementieren

Gerätehersteller gelten in der Regel als Inhaber der privaten Assets, die für jedes Gerät erstellt wurden. Daher konzentrieren sich ihre Entwicklungsbemühungen oft auf eine Gerätebasis. Die Konsistenz anderer Geräte im Ökosystem wird kaum oder gar nicht berücksichtigt.

Im Gegensatz dazu entwickeln Entwickler Apps, die auf allen Android-Smartphones funktionieren, unabhängig von den technischen Spezifikationen der einzelnen Geräte. Dieser Unterschied im Ansatz kann zu einer Fragmentierung führen, wenn die Hardwarefunktionen bestimmter Smartphones beispielsweise nicht den Erwartungen der App-Entwickler entsprechen. Wenn die Haptik-APIs also auf einigen Android-Smartphones funktionieren, aber auf anderen nicht, ist das System inkonsistent. Aus diesem Grund spielt die Hardwarekonfiguration eine wichtige Rolle, damit Hersteller Android-Haptik-APIs auf allen Geräten implementieren können.

Auf dieser Seite finden Sie eine detaillierte Checkliste, mit der Sie die Hardwarekompatibilität für die optimale Nutzung der Android-Haptik-APIs einrichten können.

Die folgende Abbildung veranschaulicht den Aufbau von gemeinsamen Kenntnissen zwischen Geräteherstellern und Entwicklern, was ein wichtiger Schritt beim Aufbau eines zusammenhängenden Ökosystems ist.

Diagramm der Anwendungsfälle der Haptik für App-Entwickler und Gerätehersteller

Abbildung 1. Wissensaustausch zwischen Geräteherstellern und Entwicklern

Checkliste für die Implementierung von Haptik

  1. Konstanten implementieren

    • Liste der Konstanten zur Implementierung von Haptik.
  2. Zuordnungskonstanten zwischen HAL und API

    • Empfehlungen zur Zuordnung zwischen öffentlichen API-Konstanten (im Framework als Platzhalter bezeichnet) und HAL-Konstanten, die die Platzhalter implementieren.
    • Weitere Informationen zu diesem Prozess finden Sie unter Designprinzipien für die empfohlene Kartierung.
  3. Hardware prüfen

    • Anleitung zum Festlegen von haptischen Effekten Anhand dieser Anleitung können Sie eine schnelle Prüfung Ihrer Hardware durchführen.

Im Folgenden werden diese Schritte genauer beschrieben.

Schritt 1: Konstanten implementieren

Führen Sie diese Prüfungen durch, um festzustellen, ob Ihr Gerät die Mindestanforderungen für die Implementierung von Haptik erfüllt.

Flussdiagramm zur haptischen Implementierung

Abbildung 2: Effekte implementieren

Flussdiagramm der Schritte zur Implementierung von Primitives

Abbildung 3 Primitive implementieren

Prüfen Sie den Implementierungsstatus der folgenden haptischen Konstanten.

Haptische Konstanten Standorte und Zusammenfassungen
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK VibrationEffect class
Haptische Konstanten in VibrationEffect enthalten keine Eingabeereignisse und haben keine UI-Elemente. Konstanten enthalten stattdessen den Begriff „Energieniveaus“, z. B. EFFECT_CLICK und EFFECT_HEAVY_CLICK, die von createPredefined() aufgerufen werden.
PRIMITIVE_TICK, PRIMITIVE_CLICK, PRIMITIVE_LOW_TICK>, PRIMITIVE_SLOW_RISE, PRIMITIVE_QUICK_RISE, PRIMITIVE_QUICK_FALL, PRIMITIVE_SPIN, PRIMITIVE_THUD VibrationEffect.Composition class
Haptische Konstanten in VibrationEffect.Composition dürfen eine skalierbare Intensität haben, die von addPrimitive(int primitiveId, float scale, int delay) aufgerufen wird.

Die unten beschriebenen alternativen Vibrationen werden auf Geräten ausgeführt, die die VibrationEffect-Konstanten nicht implementieren. Es wird empfohlen, diese Konfigurationen so zu aktualisieren, dass sie auf solchen Geräten optimal funktionieren.

  1. EFFECT_CLICK

    Mit VibrationEffect.createWaveform erstellte Wellenformvibration und die Zeiteinstellungen unter frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  2. EFFECT_HEAVY_CLICK

    Wellenformvibration, erstellt mit VibrationEffect.createWaveform und den Zeitangaben, die unter frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern konfiguriert wurden

  3. EFFECT_DOUBLE_CLICK

    Wellenformvibration, die mit VibrationEffect.createWaveform und den Zeitangaben (0, 30, 100, 30) erstellt wurde.

  4. EFFECT_TICK

    Wellenformvibration, erstellt mit VibrationEffect.createWaveform und den Zeitangaben, die unter frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern konfiguriert wurden

Flussdiagramm der Schritte zum Testen von haptischem Feedback

Abbildung 4 Feedbackkonstanten implementieren

Prüfen Sie den Status der folgenden Konstanten für öffentliches Feedback.

Haptische Konstanten Standorte und Zusammenfassungen
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 Klasse HapticFeedbackConstants
Haptische Konstanten in HapticFeedbackConstants unterstützen Eingabeereignisse mit bestimmten UI-Elementen wie KEYBOARD_PRESS und KEYBOARD_RELEASE, die von performHapticFeedback() aufgerufen werden.

Schritt 2: Konstanten zwischen HAL und API abgleichen

In Schritt 2 werden empfohlene Zuordnungen zwischen öffentlichen HAL-Konstanten und API-Konstanten dargestellt. Wenn die in Schritt 1 geprüfte Hardware die HAL-Konstanten nicht implementiert, sollten Sie in Schritt 2 die in Schritt 1 beschriebenen Fallback-Muster aktualisieren, um ähnliche Ausgaben zu generieren. Die Zuordnung wird von zwei verschiedenen Standardmodellen unterstützt.

  • Diskretes Modell (einfach)

    • Die Amplitude ist die Schlüsselvariable dieses Modells. Jede Entität in der HAL steht für eine andere haptische Amplitude.
    • Dieses Modell ist die Mindestanforderung, die für die Implementierung der grundlegenden haptischen UX erforderlich ist.
    • Eine erweiterte haptische UX erfordert eine erweiterte Hardware und ein erweitertes Modell (kontinuierliches Modell).
  • Kontinuierliches Modell (erweitert)

    • Textur und Amplitude sind die wichtigsten Variablen dieses Modells. Jede Entität in der HAL steht für unterschiedliche haptische Texturen. Die Amplitude jeder HAL-Entität wird durch den Skalierungsfaktor (S) gesteuert.
    • Für dieses Modell ist eine erweiterte Hardware erforderlich. Wenn OEMs eine erweiterte haptische UX mit VibrationEffect.Composition verwenden möchten (um die neuesten Haptik-APIs optimal zu nutzen), wird empfohlen, ihre Hardware mit diesem Modell zu implementieren.

Diskretes Modell

Es wird empfohlen, alle in der API bereitgestellten öffentlichen Konstanten den entsprechenden HAL-Konstanten zuzuordnen. Ermitteln Sie zuerst, wie viele haptische Wellenformen mit diskreter Amplitude das Gerät in der HAL definieren kann. Eine konkrete Frage, die auf diesem Konzept basiert, könnte so lauten: Wie viele haptische Effekte mit einzelnen Impulsen und für Menschen wahrnehmbaren Amplitudenunterschieden können auf meinem Smartphone definiert werden? Die Antwort auf diese Frage bestimmt die Zuordnung.

Die Definition von HAL-Konstanten ist ein hardwareabhängiger Prozess. Ein Einsteiger-Smartphone hat beispielsweise möglicherweise nur die Hardwarekapazitäten, um eine einzelne haptische Wellenform zu erzeugen. Geräte mit erweiterten Hardwarekomponenten erzeugen einen breiteren Bereich diskreter Amplitudenebenen und können mehrere haptische Wellenformen in der HAL definieren. Die konstante HAL-API-Zuordnung verwendet die HAL-Konstante (mit der mittleren Amplitude als Basis) und ordnet dann stärkere oder schwächere Effekte an.

Diagramm des HAL-Konstantenbereichs und der Rückkopplungs-Amplituden

Abbildung 5. HAL-konstanter Bereich nach Amplitude

Wenn die Anzahl der HAL-Konstanten mit diskreter Amplitude definiert ist, ist es an der Zeit, HAL- und API-Konstanten der Anzahl der HAL-Konstanten zuzuordnen. Bei diesem Zuordnungsprozess kann eine einzelne Impuls-API-Konstante in bis zu drei diskrete Gruppen von Amplitudenebenen unterteilt werden. Die Segmentierung von API-Konstanten basiert auf UX-Prinzipien für begleitende Eingabeereignisse. Weitere Informationen finden Sie unter Haptik im UX-Design.

Diskretes Modell für die konstante HAL-API-Zuordnung

Abbildung 6: HAL-API-Konstantenzuordnung: Diskretes Modell

Wenn Ihr Gerät nur zwei HAL-Konstanten mit diskreten Amplituden unterstützt, sollten Sie die HAL-Konstanten für die mittlere und hohe Amplitude zusammenführen. Ein Beispiel für diese Vorstellung in der Praxis wäre die Zuordnung von EFFECT_CLICK und EFFECT_HEAVY_CLICK zurselben HAL-Konstante, also der HAL-Konstante für den mittleren Amplitudenpegel. Wenn Ihr Gerät nur eine HAL-Konstante mit diskreter Amplitude unterstützt, sollten Sie alle drei Stufen zusammenführen.

Kontinuierliches Modell

Das kontinuierliche Modell mit Amplituden-Skalierbarkeit kann zur Definition von HAL-Konstanten angewendet werden. Ein Skalierungsfaktor (S) kann auf die HAL-Konstanten (z. B. HAL_H0, HAL_H1) angewendet werden, um die skalierte HAL (HAL_H0 × S) zu erhalten. In diesem Fall wird die skalierte HAL zugeordnet, um API-Konstanten zu definieren (HAL_H0 × S1 = H0S1 = EFFECT_TICK), wie in Abbildung 7 dargestellt. Durch die Amplitudenskalierbarkeit des kontinuierlichen Modells kann ein Gerät eine kleine Anzahl von HAL-Konstanten mit unterschiedlichen Texturen speichern und Amplitudenvariationen hinzufügen, indem der Skalierungsfaktor (S) angepasst wird. Gerätehersteller können die Anzahl der HAL-Konstanten basierend darauf definieren, wie viele verschiedene haptische Texturen sie bereitstellen möchten.

Konstanter HAL-Bereich nach Textur und Amplitude

Abbildung 7. Konstanter HAL-Bereich nach Textur (HAL_H0) und Amplitudenskala (S)

Kontinuierliches Modell für die Zuordnung von HAL-API-Konstanten

Abbildung 8: HAL-API-Konstantenzuordnung: Kontinuierliches Modell

Im kontinuierlichen Modell stehen unterschiedliche HAL-Konstanten nicht für unterschiedliche Amplituden, sondern für unterschiedliche haptische Texturen. Die Amplitude kann mit dem Skalierungsfaktor (S) konfiguriert werden. Da die Wahrnehmung der Textur (z. B. Schärfe) jedoch mit der Wahrnehmung der Dauer und Amplitude zusammenhängt, wird empfohlen, die Textur und den Skalierungsfaktor (im Designprozess der HAL-API-Zuordnung) zu kombinieren.

Abbildung 7 veranschaulicht die konstante Zuordnung durch eine zunehmende Variation von einer HAL zu vielen API-Konstanten mit Amplitudenskalierung.

Variante 1 erhöhen

Zunehmende Abweichung 2

Abbildung 9. Variation mit Amplitudenskalierbarkeit erhöhen

Bei allen skalierbaren API-Konstanten wie PRIMITIVE_TICK und PRIMITIVE_CLICK in VibrationEffect.Composition hängt das Energieniveau der API-Konstante vom Parameter float scale ab, wenn die API-Konstante über addPrimitive(int primitiveID, float scale, int delay) deklariert wird. PRIMITIVE_TICK und PRIMITIVE_CLICK können durch Verwendung verschiedener HAL-Konstanten klar voneinander unterschieden werden. Dieser Ansatz wird empfohlen, wenn Sie der Textur eine Variation hinzufügen möchten.

Schritt 3: Hardware prüfen

Bei der Hardwarebewertung werden drei haptische Effekte definiert, die für diese spezifische Bewertung als Effekte 1, 2 und 3 bezeichnet sind.

Effekt 1: Vordefinierte kurze haptische Konstanten

Die Konstante VibrationEffect.EFFECT_CLICK ist der Grundeffekt oder der gemeinsame Nenner in der HAL-API-Zuordnung aus Schritt 2. Er ist dem am häufigsten verwendeten Effekt HapticFeedbackConstants.KEYBOARD_PRESS zugeordnet. Die Auswertung dieses Effekts hilft festzustellen, ob Ihr Zielgerät für eine klare Haptik bereit ist.

Effekt 2: Kurzer benutzerdefinierter haptischer Effekt

Die Konstante VibrationEffect.createOneShot(20,255) ist für benutzerdefinierte haptische Effekte. Für kurze, einzelne benutzerdefinierte Impulse wird eine maximale Dauer von 20 ms empfohlen. Ein einzelner Impuls von mehr als 20 ms wird nicht empfohlen, da er als summende Vibration wahrgenommen wird.

Wellenform eines kurzen benutzerdefinierten haptischen Effekts

Abbildung 10. Kurzer benutzerdefinierter haptischer Effekt

Effekt 3: Langer benutzerdefinierter haptischer Effekt mit Amplitudenänderung

Die Konstante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) ist für lange benutzerdefinierte Effekte mit Amplitudenänderung vorgesehen. Die Fähigkeit, unterschiedliche Amplituden für benutzerdefinierte haptische Effekte zu erzeugen, ist einer der Indikatoren, um die Möglichkeiten des Geräts für ausdrucksstarke Haptik zu bewerten. Die empfohlenen Werte für timings [] und amplitudes [] sind {500, 500} und {128, 255}. Sie zeigen einen steigenden Amplitudentrend von 50% auf 100 % bei einer Abtastrate von 500 ms.

Wellenform des haptischen Effekts mit Amplitudenänderung

Abbildung 11 Langer benutzerdefinierter Haptikeffekt mit Amplitudenvariation

Mit der Methode Vibrator.hasAmplitudeControl() kannst du die Hardwarefunktionen der Amplitudenregelung für Effekt 3 prüfen. Das Ergebnis muss true sein, damit VibrationEffect.createWaveform wie beabsichtigt mit variabler Amplitude ausgeführt wird.

Flussdiagramm zur Bewertung des subjektiven haptischen Effekts

Abbildung 12 Bewertung des haptischen Effekts 1, 2 und 3 durch die Testpersonen

Subjektive Bewertung durchführen

Führen Sie zuerst eine subjektive Bewertung durch, um die Kohärenz schnell zu überprüfen. Das Ziel der subjektiven Bewertung besteht darin, die Amplitude der haptischen Effekte zu beobachten, um festzustellen, ob das Gerät mit für den Menschen wahrnehmbaren Amplituden eine Haptik erzeugen kann.

Eine konkrete Frage, die sich um diesen Begriff dreht, könnte so lauten: Kann das Gerät wie erwartet wahrnehmbare haptische Effekte für die Nutzer erzeugen? Wenn Sie diese Frage beantworten, können Sie nicht zufriedenstellende Haptik vermeiden, einschließlich nicht wahrnehmbarer Haptik, die Nutzer nicht spüren können, oder unbeabsichtigter Haptik, bei der Wellenformen nicht wie beabsichtigt Muster erzeugen.

Eine erweiterte Bewertung durchführen

Wir empfehlen dringend, erweiterte Qualitätsprüfungen durchzuführen. Bei erweiterten Qualitätsbewertungen werden quantifizierbare Attribute von haptischen Effekten charakterisiert, um eine Qualitätshaptik zu implementieren. Nach Abschluss der Tests sollten Gerätehersteller den aktuellen haptischen Status diagnostizieren können, sodass sie Ziele zur Verbesserung der Gesamtqualität festlegen können. Weitere Informationen finden Sie unter Hardwarebewertung.