Haptik umsetzen

Gerätehersteller gelten im Allgemeinen als Eigentümer der für jedes Gerät geschaffenen privaten Vermögenswerte. Daher konzentrieren sich ihre Entwicklungsbemühungen oft auf eine gerätespezifische Basis . Für die Konsistenz anderer Geräte im Ökosystem wird kaum oder gar kein Aufwand betrieben.

Im direkten Gegensatz dazu streben Entwickler danach, Apps zu entwickeln, die auf allen Android-Telefonen im Ökosystem funktionieren, unabhängig von den technischen Spezifikationen der einzelnen Geräte. Dieser unterschiedliche Ansatz kann zu Fragmentierungsproblemen führen, wenn beispielsweise die Hardwarefunktionen bestimmter Telefone nicht den Erwartungen der App-Entwickler entsprechen. Wenn also die Haptik-APIs auf einigen Android-Telefonen funktionieren, auf anderen jedoch nicht, ist das Ergebnis ein inkonsistentes Ökosystem. Aus diesem Grund spielt die Hardwarekonfiguration eine entscheidende Rolle, um sicherzustellen, dass Hersteller Android-Haptik-APIs auf jedem Gerät implementieren können.

Auf dieser Seite finden Sie eine Schritt-für-Schritt-Checkliste zum Einrichten der Hardware-Konformität für die optimale Nutzung der Android-Haptik-APIs.

Die folgende Abbildung veranschaulicht den Aufbau gemeinsamen Wissens zwischen Geräteherstellern und Entwicklern, was ein entscheidender Schritt bei der Schaffung eines kohärenten Ökosystems ist.

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

Abbildung 1. Wissensaufbau zwischen Geräteherstellern und Entwicklern

Checkliste für die Haptik-Implementierung

  1. Konstanten implementieren

    • Liste der Konstanten zum Implementieren von Haptik.
  2. Ordnen Sie Konstanten zwischen HAL und API zu

  3. Bewerten Sie die Hardware

    • Anleitung zu zielgerichteten haptischen Effekten. Verwenden Sie diese Anweisungen, um schnelle Überprüfungen Ihrer Hardware durchzuführen.

Wir werden jeden dieser Schritte im Folgenden genauer untersuchen.

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 des Haptik-Implementierungsprozesses

Abbildung 2. Umsetzungseffekte

Flussdiagramm der Schritte zur Implementierung von Grundelementen

Abbildung 3. Grundelemente implementieren

Überprüfen Sie den Implementierungsstatus der folgenden haptischen Konstanten.

Haptische Konstanten Standorte und Zusammenfassungen
EFFECT_TICK , EFFECT_CLICK , EFFECT_HEAVY_CLICK , EFFECT_DOUBLE_CLICK VibrationEffect Klasse
Haptische Konstanten in VibrationEffect beinhalten keine Vorstellung von Eingabeereignissen und haben keine UI-Elemente. Konstanten umfassen stattdessen den Begriff der Energieniveaus, wie 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 Klasse
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 zu aktualisieren, um auf solchen Geräten die beste Leistung zu erzielen.

  1. EFFECT_CLICK

    Wellenformvibration, erstellt mit VibrationEffect.createWaveform und den unter frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern konfigurierten Timings.

  2. EFFECT_HEAVY_CLICK

    Wellenformvibration, erstellt mit VibrationEffect.createWaveform und den unter frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern konfigurierten Timings.

  3. EFFECT_DOUBLE_CLICK

    Mit VibrationEffect.createWaveform und den Timings (0, 30, 100, 30) erstellte Wellenformvibration.

  4. EFFECT_TICK

    Wellenformvibration, erstellt mit VibrationEffect.createWaveform und den unter frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern konfigurierten Timings.

Flussdiagramm der Schritte zum Testen des haptischen Feedbacks

Abbildung 4. Feedback-Konstanten implementieren

Überprüfen Sie den Status der folgenden öffentlichen Feedbackkonstanten.

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

Schritt 2: Ordnen Sie Konstanten zwischen HAL und API zu

Schritt 2 stellt empfohlene Zuordnungen zwischen öffentlichen HAL-Konstanten und API-Konstanten vor. Wenn die in Schritt 1 bewertete Hardware die HAL-Konstanten nicht implementiert, sollte Schritt 2 verwendet werden, um die in Schritt 1 beschriebenen Fallback-Muster zu aktualisieren, um ähnliche Ausgaben zu generieren. Die Abbildung wird durch zwei verschiedene Standardmodelle unterstützt.

  • Diskretes Modell (einfach)

    • Die Amplitude ist die Schlüsselvariable dieses Modells. Jede Entität im HAL repräsentiert eine andere haptische Amplitude.
    • Dieses Modell ist eine Mindestanforderung, die zur Implementierung der grundlegenden haptischen UX erforderlich ist.
    • Eine fortschrittlichere haptische UX erfordert fortschrittliche Hardware und ein fortschrittliches Modell (kontinuierliches Modell).
  • Kontinuierliches Modell (fortgeschritten)

    • Textur und Amplitude sind die Schlüsselvariablen dieses Modells. Jede Entität im HAL repräsentiert unterschiedliche haptische Texturen. Die Amplitude jeder HAL-Entität wird durch den Skalierungsfaktor ( S ) gesteuert.
    • Dieses Modell erfordert fortschrittliche Hardware. Wenn OEMs fortschrittliche haptische UX mit VibrationEffect.Composition verwenden möchten (für die optimale Nutzung der neuesten Haptik-APIs), wird die Implementierung ihrer Hardware mit diesem Modell empfohlen.

Diskretes Modell

Es wird empfohlen, alle in der API bereitgestellten öffentlichen Konstanten den entsprechenden HAL-Konstanten zuzuordnen. Um diesen Prozess zu starten, finden Sie heraus, wie viele haptische Wellenformen mit diskreter Amplitude das Gerät im HAL definieren kann. Eine spezifische Frage, die sich an diesem Gedanken orientiert, sieht folgendermaßen aus: Wie viele haptische Einzelimpulseffekte mit für den Menschen wahrnehmbaren Amplitudenunterschieden können in meinem Telefon definiert werden? Die Antwort auf diese Frage bestimmt die Zuordnung.

Das Definieren von HAL-Konstanten ist ein hardwareabhängiger Prozess. Beispielsweise verfügt ein Einsteigertelefon möglicherweise nur über die Hardwarefunktionen, um eine einzige haptische Wellenform zu erzeugen. Geräte mit fortschrittlicheren Hardwarekomponenten erzeugen einen größeren Bereich diskreter Amplitudenpegel und können mehrere haptische Wellenformen im HAL definieren. Die HAL-API-Konstantenzuordnung verwendet die HAL-Konstante (unter Verwendung der mittleren Amplitude als Basislinie) und ordnet dann von dort aus stärkere oder schwächere Effekte an.

Diagramm des HAL-Konstantbereichs und der Rückkopplungsamplituden

Abbildung 5. HAL-Konstantenbereich nach Amplitude

Wenn die Anzahl der HAL-Konstanten mit diskreter Amplitude definiert ist, ist es an der Zeit, HAL- und API-Konstanten anhand der Anzahl der HAL-Konstanten abzubilden. Dieser Zuordnungsprozess kann eine einzelne Impuls-API-Konstante in bis zu drei diskrete Gruppen von Amplitudenniveaus segmentieren. Die Art und Weise, wie API-Konstanten segmentiert werden, basiert auf UX-Prinzipien zur Begleitung von Eingabeereignissen. Weitere Informationen finden Sie unter Haptics UX Design .

Diskretes Modell für die HAL-API-Konstantenzuordnung

Abbildung 6. HAL-API-Konstantenzuordnung: Diskretes Modell

Wenn Ihr Gerät nur zwei HAL-Konstanten mit diskreten Amplituden unterstützt, sollten Sie die Zusammenführung der HAL-Konstanten mittlerer und hoher Amplitudenstufe in Betracht ziehen. Ein Beispiel für diesen Gedanken in der Praxis wäre die Zuordnung von EFFECT_CLICK und EFFECT_HEAVY_CLICK zur gleichen HAL-Konstante, nämlich der HAL-Konstante „Mittlerer Amplitudenpegel“. Wenn Ihr Gerät nur eine HAL-Konstante mit diskreter Amplitude unterstützt, sollten Sie erwägen, alle drei Ebenen zu einer zusammenzuführen.

Kontinuierliches Modell

Das kontinuierliche Modell mit Amplitudenskalierbarkeit 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 den skalierten HAL ( HAL_H0 x S ) zu erzeugen. In diesem Fall wird der skalierte HAL der Definition von API-Konstanten ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) zugeordnet, wie in Abbildung 7 dargestellt. Durch die Nutzung der Amplitudenskalierbarkeit des kontinuierlichen Modells kann ein Gerät eine kleine Anzahl von HAL-Konstanten mit unterschiedlichen Texturen speichern und fügen Sie Amplitudenvariationen hinzu, indem Sie den Skalierungsfaktor ( S ) anpassen. Gerätehersteller können die Anzahl der HAL-Konstanten basierend darauf definieren, wie viele verschiedene haptische Texturen sie bereitstellen möchten.

HAL-Konstantbereich nach Textur und Amplitude

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

Kontinuierliches Modell für die HAL-API-Konstantenzuordnung

Abbildung 8. HAL-API-Konstantenzuordnung: Kontinuierliches Modell

Im kontinuierlichen Modell repräsentieren unterschiedliche HAL-Konstanten unterschiedliche haptische Texturen und nicht unterschiedliche Amplituden; Der Skalierungsfaktor ( S ) kann die Amplitude konfigurieren. Da jedoch die Wahrnehmung der Textur (z. B. Schärfe) mit der Wahrnehmung der Dauer und Amplitude zusammenhängt, wird die Kombination der Textur und des Skalierungsfaktors (im Entwurfsprozess der HAL-API-Zuordnung) empfohlen.

Abbildung 7 veranschaulicht die Konstantenzuordnung durch Erhöhung der Variation von einer HAL auf viele API-Konstanten mit Amplitudenskalierbarkeit.

Zunehmende Variante 1

Zunehmende Variante 2

Abbildung 9. Zunehmende Variation mit Amplitudenskalierbarkeit

Für alle skalierbaren API-Konstanten wie PRIMITIVE_TICK und PRIMITIVE_CLICK in VibrationEffect.Composition hängt das Energieniveau der API-Konstante vom float scale Parameter ab, wenn die API-Konstante über addPrimitive(int primitiveID, float scale, int delay) deklariert wird. PRIMITIVE_TICK und PRIMITIVE_CLICK können durch die Verwendung unterschiedlicher HAL-Konstanten klar unterschieden gestaltet werden. Dieser Ansatz wird empfohlen, wenn Sie der Textur Abwechslung verleihen möchten.

Schritt 3: Bewerten Sie die Hardware

Die Hardware-Bewertung umfasst die Definition von drei haptischen Effekten, die für diese spezifische Bewertung als Effekte 1, 2 und 3 bezeichnet werden.

Effekt 1: Vordefinierte kurze haptische Konstanten

Die VibrationEffect.EFFECT_CLICK Konstante ist der Basiseffekt oder der gemeinsame Nenner in der in Schritt 2 bereitgestellten HAL-API-Zuordnung. Sie ist dem am häufigsten verwendeten Effekt zugeordnet, HapticFeedbackConstants.KEYBOARD_PRESS . Die Beurteilung dieses Effekts hilft dabei, die Bereitschaft Ihres Zielgeräts für eine klare Haptik zu bestimmen.

Effekt 2: Kurzer individueller haptischer Effekt

Die Konstante VibrationEffect.createOneShot(20,255) dient für benutzerdefinierte haptische Effekte. Für kurze, einzelne benutzerdefinierte Impulse ist 20 ms der empfohlene maximale Schwellenwert zur Definition der Dauer. Ein einzelner Impuls, der länger als 20 ms dauert, wird nicht empfohlen, da er als summende Vibration wahrgenommen wird.

Wellenform mit kurzem, individuellem haptischen Effekt

Abbildung 10. Kurzer benutzerdefinierter haptischer Effekt

Effekt 3: Langer individueller haptischer Effekt mit Amplitudenvariation

Die Konstante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) ist für lange benutzerdefinierte Effekte mit Amplitudenvariation vorgesehen. Die Fähigkeit, unterschiedliche Amplituden für benutzerdefinierte haptische Effekte zu erzeugen, ist einer der Indikatoren zur Bewertung der Fähigkeiten des Geräts für eine reichhaltige Haptik . Die empfohlenen timings [] und amplitudes [] sind {500, 500} bzw. {128, 255} , was einen zunehmenden Trend der Amplitude von 50 % auf 100 % bei einer Abtastrate von 500 ms darstellt.

Haptische Effektwellenform mit Amplitudenvariation

Abbildung 11. Langer benutzerdefinierter haptischer Effekt mit Amplitudenvariation

Um die Hardwarefunktionen der Amplitudensteuerung für Effekt 3 zu überprüfen, verwenden Sie die Methode Vibrator.hasAmplitudeControl() . Das Ergebnis muss true sein, um VibrationEffect.createWaveform wie beabsichtigt mit variierender Amplitude auszuführen.

Flussdiagramm der subjektiven haptischen Wirkungsbewertung

Abbildung 12. Beurteilung des haptischen Effekts 1, 2 und 3 durch den Probanden

Führen Sie eine subjektive Beurteilung durch

Für eine schnelle Kohärenzprüfung führen Sie zunächst eine subjektive Beurteilung durch. Ziel der subjektiven Beurteilung ist es, die Amplitude der haptischen Effekte zu beobachten, um festzustellen, ob das Gerät Haptiken mit für den Menschen wahrnehmbaren Amplituden erzeugen kann.

Eine spezifische Frage, die sich um diesen Gedanken dreht, sieht so aus: Kann das Gerät wie erwartet für den Benutzer leicht wahrnehmbare haptische Effekte erzeugen? Die Beantwortung dieser Frage hilft Ihnen, fehlerhafte Haptiken zu vermeiden, einschließlich nicht wahrnehmbarer Haptiken, die Benutzer nicht fühlen können, oder unbeabsichtigter Haptiken, bei denen Wellenformen nicht wie beabsichtigt Muster erzeugen.