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 Ergebnis ein inkonsistentes System. Daher 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 Erstellen eines zusammenhängenden Ökosystems ist:

Diagramm mit Anwendungsfällen für 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. Primitive implementieren

    • Implementierungsleitfaden für HAL-Kompositionsprimitive
  3. Konstanten zwischen HAL und API abgleichen

    • Empfehlungen für die 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.
  4. 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 für den Implementierungsprozess von Haptik

Abbildung 2: Effekte implementieren

Flussdiagramm der Schritte zur Implementierung von Primitiven

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.

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.

  • EFFECT_CLICK

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

  • EFFECT_HEAVY_CLICK

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

    • EFFECT_DOUBLE_CLICK

    Eine Wellenform-Vibration, die mit VibrationEffect.createWaveform und den Timings (0, 30, 100, 30) erstellt wurde.

  • EFFECT_TICK

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

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

Schritt 2: Primitive implementieren

Haptische Primitive in VibrationEffect.Composition haben eine skalierbare Intensität, die Entwickler über addPrimitive(int primitiveId, float scale, int delay) verwenden können. Die Primitiven lassen sich in zwei Kategorien unterteilen:

  • Kurze Primitive:Primitive mit kurzer Dauer, in der Regel weniger als 20 ms. Dazu gehören CLICK, TICK und LOW_TICK.

  • Chirp-Primitive: Primitive mit variabler Amplitude und Frequenz, in der Regel mit einer längeren Dauer als kurze Primitive. Das sind SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD und SPIN.

Kurze Primitive

Kurze Primitive können durch das Beschleunigungsprofil der Vibrationsmotorausgabe beschrieben werden. Die verwendete absolute Frequenz variiert für jedes Primitive je nach Resonanzfrequenz des Aktors. Weitere Informationen zur Hardwareeinrichtung und zu Tools zur Messung der Ausgabe finden Sie unter Testgeräte einrichten.

Ein wertvoller Qualitätsmesswert für kurze Vibrationen ist das Puls-zu-Ring-Verhältnis (PRR), das in Abbildung 5 dargestellt ist. Der PRR wird als Verhältnis zwischen dem Hauptpuls, definiert durch das Signal innerhalb des Zeitfensters, in dem die Amplitude auf 10% der Spitzenamplitude abnimmt, und dem Ringpuls, definiert durch das Signal, in dem die Amplitude von 10% der Spitzenamplitude auf weniger als 1% der Spitzenamplitude abnimmt, definiert. Weitere Informationen zur PRR finden Sie unter Wellenform analysieren. Informationen zum Analysieren und Vergleichen von Ergebnissen finden Sie unter Ergebnisse mithilfe der Leistungskarte vergleichen.

Verhältnis zwischen Puls und Ring

Abbildung 5: Definition des Pulse-to-Ring-Verhältnisses

Wenden Sie kurze Primitive als Feedback für Nutzereingaben an oder spielen Sie sie in längeren Kompositionen ab, um weiche Texturen zu erzeugen. Das bedeutet, dass sie in der Regel häufig ausgelöst und in schneller Folge abgespielt werden. Die wahrgenommene Intensität eines einzelnen kurzen Primitives kann die größere Effektintensität verstärken. Daher sollten Sie ein einzelnes oder niedriges Zifferblattelement mit einer größeren Komposition kalibrieren, z. B. 100 aufeinanderfolgende Markierungen.

Klick-Attribution

Das Klick-Primitive ist ein starker, klarer Effekt, der in der Regel nahe der Resonanzfrequenz eines Geräts arbeitet, um in kurzer Zeit eine maximale Leistung zu erzielen. Sie ist stärker und tiefer als die anderen Primitiven und wird mit maximaler Intensität ausgeführt.

Verwenden Sie gegebenenfalls eine Motorübersteuerung am Anfang und eine aktive Bremsung am Ende, um eine kurze Anlauf- und Abschaltzeit des Motors zu erreichen. Bei einigen Motoren kann eine schnellere Beschleunigung durch Verwendung einer Rechteckwelle anstelle einer Sinuswelle erreicht werden. Abbildung 6 zeigt ein Beispiel für ein Ausgabebeschleunigungsprofil für das Klick-Attribut:

Klicken Sie auf das Profil für die Beschleunigung der primitiven Ausgabe.

Abbildung 6 Beispiel für ein Ausgabebeschleunigungsprofil für Klick-Primitive

Parameter Richtlinie
Dauer

Ziel: 12 ms

Limit: < 30 ms

Beschleunigung der Spitzenleistung

Ziel: 2G

Limit: > 1 G

Häufigkeit Ungefähr bei der Resonanzfrequenz

Häkchen (leichtes Häkchen)

Das Tick-Primitive ist ein scharfer, kurzer Effekt, der in der Regel in einem höheren Frequenzbereich verwendet wird. Dieses Muster kann auch als Klick mit mittlerer Intensität, höherer Häufigkeit und kurzem Tail beschrieben werden. Dasselbe gilt für eine kurze Einschwingzeit mit Motorüberlastung oder einem Rechtecksignal für den Anfang und aktiver Bremsung beim Versatz. Abbildung 7 zeigt ein Beispiel für ein Ausgabebeschleunigungsprofil für das Tick-Primitive:

Profil für die Beschleunigung der Ausgabe von Tick-Primitiv

Abbildung 7. Beispiel für ein Ausgabebeschleunigungsprofil für das Tick-Primitive

Parameter Richtlinie
Dauer

Ziel: 5 ms

Limit: < 20 ms

Beschleunigung der Spitzenleistung

Ziel: Hälfte von CLICK, 1 G

Limit: Zwischen 0,5 G und 1 G

Häufigkeit

Ziel: 2-fache Resonanzfrequenz

Grenzwert: < 500 Hz

Primitive mit niedrigem Tick

Das Low-Tick-Primitive ist eine weichere, schwächere Version eines Light-Ticks, das in einem niedrigeren Frequenzbereich arbeitet, um dem Effekt mehr Körper zu verleihen. Dieses Element kann auch als Klick mit mittlerer Intensität und geringerer Häufigkeit beschrieben werden, der wiederholt für dynamisches Feedback verwendet werden soll. Dieselben Empfehlungen gelten für eine kurze Einschwingzeit mit Motorübersteuerung oder einem Rechtecksignal für den Anfang. Abbildung 8 zeigt ein Beispiel für ein Ausgabebeschleunigungsprofil für das Low-Tick-Primitive:

Profil für die Beschleunigung der Ausgabe primitiver Elemente mit niedrigem Tick

Abbildung 8. Beispiel für ein Ausgabebeschleunigungsprofil für ein Low-Tick-Primitive

Parameter Richtlinie
Dauer

Ziel: 12 ms

Limit: < 30 ms

Beschleunigung der Spitzenleistung

Ziel: 1/4 TICK, 0,25 G

Limit: Zwischen 0,2 G und 0,5 G

Häufigkeit

Ziel: 2/3 der Resonanzfrequenz

Grenzwert: < 100 Hz

Chirp-Primitive

Chirp-Primitive können durch die Eingabesignale für die Spannungsstufe und die Vibrationsfrequenz beschrieben werden. Die Beschleunigung, die der Motor in verschiedenen Frequenzbereichen liefern kann, hängt von der Frequenzgangkurve des Aktors ab. Die Frequenzbereiche und Spannungsstufen müssen für jedes Gerät angepasst werden.

Primitiver Wert für langsame Steigerung

Der langsame Anstieg ist ein langsamer Amplituden- und Frequenzsweep nach oben mit sanftem Beginn und kontinuierlich steigender Vibrationsintensität während des Sweeps. Sie kann durch einen gleichmäßigen Durchlauf sowohl der Amplitude als auch der Frequenz mit einem niedrigeren Frequenzbereich implementiert werden, der außerhalb der Resonanz liegt. Abbildung 9 zeigt die Eingabeparameter und ein Beispiel für ein Ausgabebeschleunigungsprofil für diese Implementierung. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Vibrationsamplitude im Zeitverlauf ändert. Die blaue Linie entspricht den Frequenzlabels auf der rechten Seite und gibt an, wie sich die Vibrationsfrequenz im Zeitverlauf ändert.)

Eingabeparameter und Ausgabebeschleunigungsprofil für Primitives mit langsamem Anstieg

Abbildung 9. Eingabeparameter und Beispiel für ein Ausgabebeschleunigungsprofil für das Primitive „Langsames Ansteigen“

Wenn die Frequenz des Motors begrenzt ist (nicht stark genug von der Resonanzfrequenz entfernt), ist eine alternative Implementierung ein Sinussweep von 1/2 x bis 1 x der Resonanzfrequenz. Die Motorresonanz trägt dazu bei, dass der Signalpegel am Ende erreicht wird.

Parameter Richtlinie
Dauer

Ziel: 500 ms

Toleranz: 20 ms

Beschleunigung der Spitzenleistung

Ziel: 0,5 G

Limit: Zwischen 0,5 G und 1 G

Häufigkeit

Ziel: 1/2 bis 2/3 der Resonanzfrequenz

Alternative: 1/2 der Resonanzfrequenz

Primitiver Wert für schnelles Ansteigen

Der schnelle Anstieg ist ein schneller Anstieg der Amplitude und Frequenz nach oben mit sanftem Beginn und gleichmäßig zunehmender Vibrationsintensität während des gesamten Anstiegs. Die Ziele für die Ausgabebeschleunigung und die Vibrationsfrequenz sollten mit dem Primitiven „Langsames Ansteigen“ übereinstimmen, aber in kürzerer Zeit erreicht werden. Abbildung 10 zeigt die Vibrationseingabeparameter und ein Beispiel für ein Ausgabebeschleunigungsprofil für das Primitive „Langsames Ansteigen“. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Vibrationsamplitude im Zeitverlauf ändert. Die blaue Linie entspricht den Frequenzlabels auf der rechten Seite und gibt an, wie sich die Vibrationsfrequenz im Zeitverlauf ändert.)

Eingabeparameter und Ausgabebeschleunigungsprofil für das Primitive „Schnell ansteigend“

Abbildung 10. Eingabeparameter und Beispiel für ein Ausgabebeschleunigungsprofil für das Primitive „Schnell ansteigend“

Parameter Richtlinie
Dauer

Ziel: 150 ms

Toleranz: 20 ms

Beschleunigung der Spitzenleistung

Ausrichtung: Gleich wie SLOW_RISE

Limit: Wie bei SLOW_RISE

Häufigkeit

Ausrichtung: Gleich wie SLOW_RISE

Alternative: Entspricht SLOW_RISE

Schneller Abfall

Der schnelle Abfall ist ein schneller Amplituden- und Frequenzsweep nach unten mit einem sanften Beginn. Sie können eine höhere Frequenz als Ausgangspunkt verwenden, während der Motor hochfährt, um die maximale Ausgangsbeschleunigung zu erreichen. Die Frequenz sollte während des gesamten Sweeps kontinuierlich abnehmen, auch während der Anstiegszeit. Abbildung 11 zeigt die Eingabeparameter und ein Beispiel für ein Ausgabebeschleunigungsprofil für diese Implementierung. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Vibrationsamplitude im Zeitverlauf ändert. Die blaue Linie entspricht den Frequenzlabels auf der rechten Seite und zeigt, wie sich die Vibrationsfrequenz im Zeitverlauf ändert.)

Eingabeparameter und Ausgabebeschleunigungsprofil für das Primitive „Schnell fallen“

Abbildung 11 Eingabeparameter und Beispiel für ein Ausgabebeschleunigungsprofil für das Primitive „Schnell fallen“

Parameter Richtlinie
Dauer

Ziel: 100 ms

Toleranz: 20 ms

Beschleunigung der Spitzenleistung

Ziel: 1 G

Limit: 0,5 G bis 2 G

Häufigkeit

Ziel: 2- bis 1-fache Resonanzfrequenz

Thud-Primitive

Der Donner ist ein dumpfer, tiefer, percussiver Effekt, der das physische Gefühl des Klopfens auf hohle Holz simuliert. Dieser Primitive arbeitet in einem niedrigen Frequenzbereich, ähnlich wie das Low-Tick-Primitive, um dem Effekt mehr Körper zu verleihen. Sie können das Thud-Primitive als einen Amplituden- und Frequenzsweep nach unten in einem niedrigeren Frequenzbereich (vorzugsweise unter 100 Hz) implementieren. Abbildung 12 zeigt die Eingabeparameter und ein Beispiel für ein Ausgabebeschleunigungsprofil für diese Implementierung. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Vibrationsamplitude im Zeitverlauf ändert. Die blaue Linie entspricht den Frequenzlabels auf der rechten Seite und zeigt, wie sich die Vibrationsfrequenz im Zeitverlauf ändert.)

Eingabeparameter und Ausgabebeschleunigungsprofil für das Thud-Primitive

Abbildung 12 Eingabeparameter und Beispiel für das Ausgabebeschleunigungsprofil für das „Thud“-Primitive

Wenn die Frequenzantwort des Motors begrenzt ist, kann eine alternative Implementierung mit einem Antriebssignal mit voller Intensität bei der Resonanzfrequenz beginnen und auf die niedrigste mögliche Frequenz abfallen, die noch wahrgenommen werden kann. Bei diesem Ansatz muss möglicherweise die Intensität des Antriebssignals bei der niedrigeren Frequenz erhöht werden, damit die Vibration spürbar ist.

Parameter Richtlinie
Dauer

Ziel: 300 ms

Toleranz: 20 ms

Beschleunigung der Spitzenleistung

Ziel: 0,25 G

Limit: Zwischen 0,2 G und 0,5 G

Häufigkeit

Ziel: 1/2 bis 1/3 der Resonanzfrequenz

Alternative: 1- bis 2-fache Resonanzfrequenz

Drehen-Primitive

Die Drehung simuliert ein Drehmomentum mit schnellen Auf- und Abbewegungen mit einem leichten Akzent in der Mitte. Die Drehung kann durch unabhängiges Schwenken der Amplitude und der Frequenz in entgegengesetzten Richtungen und anschließende Rückwärtsbewegung implementiert werden. Verwenden Sie einen niedrigeren Frequenzbereich (vorzugsweise unter 100 Hz). Abbildung 13 zeigt die Eingabeparameter und ein Beispiel für ein Ausgabebeschleunigungsprofil für diese Implementierung. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Vibrationsamplitude im Zeitverlauf ändert. Die blaue Linie entspricht den Frequenzlabels auf der rechten Seite und zeigt, wie sich die Vibrationsfrequenz im Zeitverlauf ändert.)

Wir empfehlen, das Primitive „Drehen“ zweimal hintereinander oder dreimal in Kompositionen aufzurufen, um ein sich drehendes und unruhiges Gefühl zu erzeugen.

Wenn die Frequenz des Motors begrenzt ist, können Sie alternativ einen schnellen Sinussweep von 1/2 x bis 1 x der Resonanzfrequenz und zurück ausführen. Durch die Motorresonanz erhält das Signal automatisch einen Akzent in der Mitte.

Eingabeparameter und Ausgabebeschleunigungsprofil für das Primitive „Drehen“

Abbildung 13 Eingabeparameter und Beispiel für ein Ausgabebeschleunigungsprofil für das Primitive „Drehen“

Parameter Richtlinie
Dauer

Ziel: 150 ms

Toleranz: 20 ms

Beschleunigung der Spitzenleistung

Ziel: 0,5 G

Limit: Zwischen 0,25 G und 0,75 G

Häufigkeit

Ziel: 2/3 bis 1/3, dann zurück zu 1/2 der Resonanzfrequenz

Alternative: 2/3 bis 1 x, dann zurück zu 1/2 der Resonanzfrequenz

Schritt 3: Konstanten zwischen HAL und API zuordnen

In Schritt 3 werden empfohlene Zuordnungen zwischen öffentlichen HAL-Konstanten und API-Konstanten dargestellt. Wenn die in Schritt 1 geprüfte Hardware die HAL-Konstanten nicht implementiert, aktualisieren Sie in Schritt 3 die in Schritt 1 beschriebenen Fallback-Muster, um ähnliche Ausgaben zu generieren. Bei der Zuordnung werden zwei verschiedene Standardmodelle verwendet:

  • 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 eine Mindestanforderung für die Implementierung der grundlegenden haptischen UX.
    • 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. Bei der HAL-API-Konstantenzuordnung wird die HAL-Konstante (unter Verwendung der mittleren Amplitude als Baseline) verwendet, um dann stärkere oder schwächere Effekte anzuordnen.

Diagramm des konstanten HAL-Bereichs und der Feedbackamplituden

Abbildung 14. 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 segmentiert 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 Zuordnung von HAL-API-Konstanten

Abbildung 15. 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 die mittlere Amplitudenebene. Wenn Ihr Gerät nur eine HAL-Konstante mit diskreter Amplitude unterstützt, sollten Sie alle drei Ebenen in eine zusammenführen.

Kontinuierliches Modell

Das kontinuierliche Modell mit Amplitudenskalierung kann angewendet werden, um HAL-Konstanten zu definieren. 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 16 dargestellt. Durch die Amplitudenskalierung 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.

HAL-Konstantenbereich nach Textur und Amplitude

Abbildung 16: Konstanter HAL-Bereich nach Textur (HAL_H0) und Amplitudenskala (S)

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

Abbildung 17. 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 18 veranschaulicht die konstante Zuordnung durch eine zunehmende Variation von einer HAL zu vielen API-Konstanten mit Amplitudenskalierung.

Variation erhöhen



1

Variante erhöhen
2

Abbildung 18 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 mehr Abwechslung verleihen möchten.

Schritt 4: Hardware prüfen

Bei der Hardwarebewertung werden drei haptische Effekte definiert, die für diese spezifische Bewertung als Effekt 1, 2 und 3 gekennzeichnet 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. Anhand dieser Beurteilung können Sie feststellen, ob Ihr Zielgerät für deutliche haptische Rückmeldungen geeignet 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 19. 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 Fähigkeiten des Geräts für ausdrucksstarke Haptik zu bewerten. Die empfohlenen Werte für timings [] und amplitudes [] sind {500, 500} und {128, 255}. Sie stellen einen steigenden Amplitudentrend von 50% auf 100 % bei einer Abtastrate von 500 ms dar.

Wellenform des haptischen Effekts mit Amplitudenvariation

Abbildung 20. Langer benutzerdefinierter haptischer Effekt mit Amplitudenänderung

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 21. 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. Ziel der subjektiven Bewertung ist es, die Amplitude der haptischen Effekte zu beobachten, um festzustellen, ob das Gerät Haptik mit für Menschen wahrnehmbaren Amplituden 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 unmerklicher Haptik, die Nutzer nicht spüren können, oder unbeabsichtigter Haptik, bei der Wellenformen nicht wie beabsichtigt Muster erzeugen.

Erweiterte Bewertung durchführen

Wir empfehlen dringend, erweiterte Qualitätsprüfungen durchzuführen. Erweiterte Qualitätsbewertungen charakterisieren quantifizierbare Attribute von haptischen Effekten, um hochwertige Haptik 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.