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. Wir empfehlen, diese Konfigurationen zu aktualisieren, damit sie auf solchen Geräten optimal funktionieren.

  • EFFECT_CLICK

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

  • EFFECT_HEAVY_CLICK

    Die Wellenform-Vibration wurde mit VibrationEffect.createWaveform erstellt und die Zeitsteuerung wurde 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 die unter frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern konfigurierten Zeitangaben.

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 HapticFeedbackConstants-Klasse
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 Primitives 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:Primitive mit unterschiedlicher Amplitude und Frequenz, die in der Regel länger als kurze Primitive sind. Dazu gehören SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD und SPIN.

Kurze Primitiven

Kurze Primitiva können durch das Beschleunigungsprofil des Vibratormotors beschrieben werden. Die verwendete absolute Frequenz variiert für jedes Primitiv 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 PRR 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 Intensität des größeren Effekts verstärken. Aus diesem Grund sollten Sie ein einzelnes Tick- oder Low-Tick-Primitive mit einer größeren Komposition, z. B. 100 aufeinanderfolgenden Ticks, abstimmen.

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 eine maximale Ausgabe zu erreichen. Es 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:

Auf das Beschleunigungsprofil für die Primitivausgabe klicken

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. Die gleichen Richtlinien gelten für eine kurze 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 Beschleunigungsprofil 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‑fache Resonanzfrequenz

Grenzwert: < 500 Hz

Primitive für niedrige Ticks

Das Primitive „Low Tick“ ist eine weichere, schwächere Version von „Light Tick“ und arbeitet in einem niedrigeren Frequenzbereich, 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 das 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

Limit: < 100 Hz

Chirp-Primitive

Chirp-Primitiven können durch die Eingangssignale für Spannungspegel und Schwingungsfrequenz 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 „Langsamer Anstieg“

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 weichem Beginn und gleichmäßig ansteigender Vibrationsintensität über den Sweep hinweg. Die Zielwerte 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 „Langsamer Anstieg“. 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 Abfall 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, auch während der Anstiegszeit, stetig abnehmen. 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-fache Resonanzfrequenz

Thud-Primitiv

Das Geräusch ist ein dumpfer, tiefer, perkussiver Effekt, der 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 Geräusch-Primitive als Abwärts-Sweep 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 der Resonanzfrequenz

Primitiv für „Drehen“

Der Spin simuliert eine schnelle Auf- und Abwärtsbewegung mit einem leichten Akzent in der Mitte. Die Drehung kann durch unabhängiges Durchlaufen der 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