Konstanten und primitive Typen implementieren

Haptische Konstanten und Primitiven werden durch die Vibrator-HAL definiert und vom Android-Framework öffentlichen APIs zugeordnet. Führen Sie die folgenden 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: Effekte implementieren

Flussdiagramm der Schritte zur Implementierung von Primitiven

Abbildung 3: Primitive implementieren

Konstanten implementieren

Haptische Konstanten in VibrationEffect können von Entwicklern über VibrationEffect.createPredefined() verwendet werden. 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 Informationen zu Eingabeereignissen und haben keine UI-Elemente. Konstanten umfassen stattdessen den Begriff der Energieniveaus, z. B. EFFECT_CLICK und EFFECT_HEAVY_CLICK, die von createPredefined() aufgerufen werden.

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

  • EFFECT_CLICK

    Mit VibrationEffect.createWaveform erstellte Wellenform-Vibration und unter frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern konfigurierte Zeitsteuerung.

  • EFFECT_HEAVY_CLICK

    Die Wellenform-Vibration wird mit VibrationEffect.createWaveform erstellt und die Zeitsteuerung wird unter frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern konfiguriert.

    • EFFECT_DOUBLE_CLICK

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

  • EFFECT_TICK

    Mit VibrationEffect.createWaveform erstellte Wellenform-Vibration und unter frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern konfigurierte Zeitsteuerung.

Flussdiagramm der Schritte zum Testen von haptischem Feedback

Abbildung 4: Feedbackkonstanten implementieren

Haptische Konstanten in HapticFeedbackConstants können von Entwicklern über View.performHapticFeedback() verwendet werden. Prü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 Klasse HapticFeedbackConstants
Haptische Konstanten in HapticFeedbackConstants unterstützen Eingabeereignisse mit bestimmten UI-Elementen wie KEYBOARD_PRESS und KEYBOARD_RELEASE, die von performHapticFeedback() aufgerufen werden.

Primitive implementieren

Haptische Primitiven 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 Primitives:Primitives mit kurzer Dauer, in der Regel weniger als 20 ms. Dazu gehören CLICK, TICK und LOW_TICK.

  • Chirp-Primitiven:Primitiven mit unterschiedlicher Amplitude und Frequenz, die in der Regel länger als kurze Primitiven sind. Dazu gehören SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD und SPIN.

Short-Primitive

Kurze Primitives können durch das Beschleunigungsprofil des Vibratormotors beschrieben werden. Die verwendete absolute Frequenz variiert für jedes Primitive in Abhängigkeit von der Resonanzfrequenz des Aktuators. Weitere Informationen zur Hardwareeinrichtung und zu Tools zum Messen der Ausgabe finden Sie unter Testgeräte einrichten.

Ein wichtiger Qualitätsmesswert für kurze Vibrationen ist das Verhältnis von Impuls zu Klingeln (Pulse to Ring Ratio, PRR), das in Abbildung 5 dargestellt ist. Die PRR ist das Verhältnis zwischen dem Hauptpuls, der durch das Signal innerhalb des Zeitfensters definiert wird, in dem die Amplitude auf 10% der Spitzenamplitude abnimmt, und dem Ringpuls, der durch das Signal definiert wird, in dem die Amplitude von 10% der Spitzenamplitude auf weniger als 1% der Spitzenamplitude abnimmt. Die Formel für die Wahrscheinlichkeit für eine Reichweitensteigerung lautet:

$$ \text{Pulse to ring ratio (PRR)} = 20log_{10}\frac{\text{RMS (main pulse)}}{\text{RMS (ring)}} $$

Weitere Informationen zu PRR finden Sie unter Wellenform analysieren. Weitere Informationen zum Analysieren und Vergleichen von Ergebnissen finden Sie unter Ergebnisse mit der Leistungskarte vergleichen.

Verhältnis zwischen Puls und Klingeln

Abbildung 5: Definition des Verhältnisses zwischen Impuls und Klingeln

Wenden Sie kurze Primitives 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 kurz nacheinander abgespielt werden. Die wahrgenommene Intensität eines einzelnen kurzen Primitivs kann die größere Effektintensität verstärken. Kalibrieren Sie daher ein einzelnes Tick- oder Low-Tick-Primitive mit einer größeren Komposition, z. B. 100 aufeinanderfolgende Ticks.

Klick-Primitive

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

Verwenden Sie, falls verfügbar, am Anfang den Motor-Overdrive und am Ende die aktive Bremsung, um eine kurze Anstiegs- und Abfallzeit des Motors zu erreichen. Bei einigen Motoren kann durch die Verwendung einer Rechteckwelle anstelle einer Sinuswelle eine schnellere Beschleunigung erreicht werden. Abbildung 6 zeigt ein Beispiel für ein Ausgabebeschleunigungsprofil für das Klick-Primitiv:

Klicken Sie auf das Beschleunigungsprofil für die Primitivausgabe.

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

Parameter Richtlinie
Dauer

Ziel: 12 ms

Limit: < 30 ms

Beschleunigung der Spitzenleistung

Ziel: 2 G

Grenzwert: > 1 G

Häufigkeit Ungefähr bei Resonanzfrequenz

Tick-Primitive (leichter Tick)

Das Tick-Primitive ist ein scharfer, kurzer Effekt, der normalerweise in einem höheren Frequenzbereich auftritt. Dieses Primitive kann auch als Klick mittlerer Intensität mit höherer Häufigkeit und kurzem Tail beschrieben werden. Dasselbe gilt für das Erreichen einer kurzen Anstiegszeit durch Motor-Overdrive oder eine Rechteckwelle für den anfänglichen Beginn und aktives Bremsen am Offset. Abbildung 7 zeigt ein Beispiel für ein Ausgabebeschleunigungsprofil für das Tick-Primitive:

Beschleunigungsprofil für die Ausgabe des Tick-Primitivs

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

Parameter Richtlinie
Dauer

Ziel: 5 ms

Grenzwert: < 20 ms

Beschleunigung der Spitzenleistung

Ziel: Hälfte von CLICK, 1 G

Grenzwert: zwischen 0,5 G und 1 G

Häufigkeit

Ziel: 2 × Resonanzfrequenz

Grenzwert: < 500 Hz

Primitive für niedrige Ticks

Der Low-Tick-Primitive ist eine weichere, schwächere Version eines Light-Ticks, die in einem niedrigeren Frequenzbereich arbeitet, um dem Effekt mehr Fülle zu verleihen. Dieses Primitive kann auch als Klick mittlerer Intensität bei niedrigerer Frequenz beschrieben werden, der wiederholt für dynamisches Feedback verwendet werden soll. Die gleichen Richtlinien gelten für eine kurze Anstiegszeit durch Motor-Overdrive oder eine Rechteckwelle für den ersten Anstieg. Abbildung 8 zeigt ein Beispiel für ein Ausgabebeschleunigungsprofil für das Low-Tick-Primitive:

Beschleunigungsprofil für die Ausgabe von Primitiven mit niedriger Taktfrequenz

Abbildung 8. Beispiel für das 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

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

Häufigkeit

Ziel: 2/3 der Resonanzfrequenz

Grenzwert: < 100 Hz

Chirp-Primitive

Chirp-Primitiven können durch die Eingangssignale für Spannungspegel und Vibrationsfrequenz beschrieben werden. Die Beschleunigung, die der Motor in verschiedenen Frequenzbereichen ausgeben kann, hängt von der Frequenzgangkurve des Aktuators ab. Die Frequenzbereiche und Spannungspegel müssen für jedes Gerät angepasst werden.

Primitiv für langsamen Anstieg

Der langsame Anstieg ist ein langsamer Amplituden- und Frequenzsweep nach oben mit sanftem Beginn und gleichmäßig ansteigender Vibrationsintensität über den Sweep hinweg. Sie kann durch einen konsistenten Sweep sowohl der Amplitude als auch der Frequenz implementiert werden, wobei ein niedrigerer Frequenzbereich verwendet wird, der nicht auf Resonanz basiert. 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 Schwingungsamplitude im Laufe der Zeit ändert. Die blaue Linie entspricht den Häufigkeitslabels auf der rechten Seite und zeigt, wie sich die Vibrationshäufigkeit im Zeitverlauf ändert.)

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

Abbildung 9. Eingabeparameter und Beispiel für das Ausgabebeschleunigungsprofil für das Primitive „Langsamer Anstieg“

Wenn der Frequenzgang des Motors begrenzt ist (nicht stark genug außerhalb seiner Resonanzfrequenz), ist eine alternative Implementierung ein Sinus-Sweep von 1/2x bis 1x der Resonanzfrequenz. Die Motorresonanz trägt dazu bei, dass am Ende der Signalpeak erreicht wird.

Parameter Richtlinie
Dauer

Ziel: 500 ms

Toleranz: 20 ms

Beschleunigung der Spitzenleistung

Ziel: 0,5 G

Grenzwert: zwischen 0,5 G und 1 G

Häufigkeit

Ziel: 1/2 bis 2/3 der Resonanzfrequenz

Alternative: 1/2 bis Resonanzfrequenz

Primitiv für schnellen Anstieg

Der schnelle Anstieg ist ein schnellerer Amplituden- und Frequenzsweep nach oben mit sanftem Beginn und gleichmäßig ansteigender Vibrationsintensität über den Sweep hinweg. Die Ziele für die Beschleunigung und die Vibrationsfrequenz der Ausgabe sollten mit denen des Primitivs für den langsamen Anstieg übereinstimmen, aber in kürzerer Zeit erreicht werden. Abbildung 10 zeigt die Parameter für die Vibrationseingabe und ein Beispiel für das Ausgabebeschleunigungsprofil für das Primitive „Langsame Steigerung“. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Schwingungsamplitude im Laufe der Zeit ändert. Die blaue Linie entspricht den Häufigkeitslabels auf der rechten Seite und zeigt, wie sich die Vibrationshäufigkeit im Zeitverlauf ändert.)

Eingabeparameter und Ausgabebeschleunigungsprofil für das Primitive „Schneller Anstieg“

Abbildung 10. Eingabeparameter und Beispiel für das Ausgabebeschleunigungsprofil für das Primitive „Schneller Anstieg“

Parameter Richtlinie
Dauer

Ziel: 150 ms

Toleranz: 20 ms

Beschleunigung der Spitzenleistung

Ziel: wie SLOW_RISE

Limit: wie SLOW_RISE

Häufigkeit

Ziel: wie SLOW_RISE

Alternative: Wie SLOW_RISE

Primitiv für schnellen Fall

Der schnelle Fall ist ein schneller Abwärtssweep von Amplitude und Frequenz mit einem weichen Beginn. Sie können eine höhere Frequenz als Startpunkt verwenden, während der Motor hochfährt, um die Beschleunigung der Spitzenleistung zu erreichen. Die Häufigkeit sollte während des gesamten Sweeps kontinuierlich abnehmen, auch während der Anstiegszeit. Abbildung 11 zeigt die Eingabeparameter und ein Beispiel für das Ausgabebeschleunigungsprofil für diese Implementierung. Die rote Linie entspricht den Amplitudenlabels auf der linken Seite und zeigt, wie sich die Schwingungsamplitude im Laufe der Zeit ändert. Die blaue Linie entspricht den Häufigkeitslabels auf der rechten Seite und zeigt, wie sich die Vibrationshäufigkeit im Zeitverlauf ändert.)

Eingabeparameter und Ausgabebeschleunigungsprofil für das Primitive „Schneller Fall“

Abbildung 11. Eingabeparameter und Beispiel für das Ausgabebeschleunigungsprofil für das Primitive „schneller Fall“

Parameter Richtlinie
Dauer

Ziel: 100 ms

Toleranz: 20 ms

Beschleunigung der Spitzenleistung

Ziel: 1 G

Grenzwert: zwischen 0,5 G und 2 G

Häufigkeit

Ziel: 2- bis 1-mal die Resonanzfrequenz

Thud-Primitive

Der dumpfe Schlag ist ein tiefes, perkussives Geräusch, das das Gefühl simuliert, auf hohles Holz zu klopfen. Dieses Primitive arbeitet in einem niedrigen Frequenzbereich, ähnlich dem Low-Tick-Primitive, um dem Effekt mehr Fülle zu verleihen. Sie können das „Thud“-Primitive als Abwärtssweep von Amplitude und Frequenz 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 Schwingungsamplitude im Laufe der Zeit ändert. Die blaue Linie entspricht den Häufigkeitslabels auf der rechten Seite und zeigt, wie sich die Vibrationshäufigkeit 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 der Frequenzgang des Motors begrenzt ist, kann man alternativ mit einem Antriebssignal mit voller Intensität bei der Resonanzfrequenz beginnen und auf die niedrigstmögliche Frequenz fallen, die noch wahrgenommen werden kann. Bei diesem Ansatz muss möglicherweise die Intensität des Treibersignals 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

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

Häufigkeit

Ziel: 1/2 bis 1/3 der Resonanzfrequenz

Alternative: 1- bis 1/2-fache Resonanzfrequenz

Primitiv für Drehen

Der Spin simuliert eine schnelle Auf- und Abwärtsbewegung mit einem leichten Akzent in der Mitte. Der Spin kann durch unabhängiges Durchlaufen von Amplitude und Frequenz in entgegengesetzten Richtungen und anschließende Umkehrung der Bewegung implementiert werden. Es ist wichtig, einen niedrigeren Frequenzbereich zu verwenden (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 Schwingungsamplitude im Laufe der Zeit ändert. Die blaue Linie entspricht den Häufigkeitslabels auf der rechten Seite und zeigt, wie sich die Vibrationshäufigkeit im Zeitverlauf ändert.)

Wir empfehlen, das Spin-Primitive zweimal hintereinander oder dreimal in Kompositionen aufzurufen, um ein Gefühl von Drehung und Unruhe zu erzeugen.

Wenn der Frequenzgang des Motors begrenzt ist, kann alternativ ein schneller Sinus-Sweep von 1/2x bis 1x der Resonanzfrequenz und zurück durchgeführt werden. Die Motorresonanz verleiht dem Signal automatisch einen Akzent in der Mitte.

Eingabeparameter und Ausgabebeschleunigungsprofil für Spin-Primitive

Abbildung 13. Eingabeparameter und Beispiel für das Ausgabebeschleunigungsprofil für ein Spin-Primitive

Parameter Richtlinie
Dauer

Ziel: 150 ms

Toleranz: 20 ms

Beschleunigung der Spitzenleistung

Ziel: 0,5 G

Grenzwert: 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 1x, dann zurück zu 1/2 der Resonanzfrequenz