Alle Verbesserungen des Android-Frameworks rund um die Haptik basieren auf eine Reihe von UX-Prinzipien, die sich in gleichem Tempo weiterentwickeln. Der aktuelle wird unter anderem die Vibration durch eine klare Haptik ersetzt. Haptisches Feedback
Abbildung 1: Aktuelle Prinzipien
In der folgenden Tabelle sind alle verfügbaren haptischen APIs aufgeführt.
API | Methoden | Jahr hinzugefügt |
---|---|---|
android.view.HapticFeedbackConstants |
|
Bis 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.View |
|
Bis 2016 |
android.os.vibrator |
|
Bis 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.os.VibrationEffect |
|
2017 (Android 8) |
|
2019 (Android 10) | |
android.os.VibrationEffect.Composition |
|
2020 (Android 11) |
android.media.AudioAttributes.Builder |
|
2019 (Android 10) |
Vibrationsalarm
Das geht auf Pager und Feature-Phones zurück – ein qualitativ minderwertiger, aber energieeffizienter ERM-System. Summer-basierte Vibrationen wurden anstelle von akustischen Klingeltönen verwendet. Lautlos-Modus an. Die Legacy-Hardwarekomponenten, die laute und unangenehme Geräusche erzeugen hörbare Geräusche können die haptische Nutzererfahrung beeinträchtigen, indem sie Impressionen von geringer Qualität liefern (für z. B. ein billiges, kaputtes Smartphone).
Haptik löschen
Die eindeutige Haptik unterstützt diskrete Statusänderungen, z. B. binäre Änderungen während des Ein-/Aus-Vorgangs). Aufgrund der Beschaffenheit des diskrete Angebote gibt, wird eine klare Haptik als eine Einheit generiert (für Beispiel: ein Haptik-Effekt pro Eingabeereignis).
Das Ziel von Android ist es, eine klare Haptik mit starken, aber scharfen Empfindungen zu bieten, als lebhafte oder matschige Empfindungen.
Zu den vordefinierten haptischen Konstanten, die für eine eindeutige Haptik erstellt wurden, gehören: Folgendes:
CLOCK_TICK
CONFIRM
CONTEXT_CLICK
GESTURE_END
GESTURE_START
KEYBOARD_PRESS
KEYBOARD_RELEASE
KEYBOARD_TAP
LONG_PRESS
REJECT
TEXT_HANDLE_MOVE
VIRTUAL_KEY
VIRTUAL_KEY_RELEASE
In
VibrationEffect
:
EFFECT_CLICK
EFFECT_DOUBLE_CLICK
EFFECT_HEAVY_CLICK
EFFECT_TICK
Um ein gemeinsames Wissen zwischen Geräteherstellern und Entwicklern aufzubauen, die Haptik insgesamt verbessert. Verwenden Sie die Methode einfache Checkliste, Hardwarebewertung, und CDD. um mehr über die haptische Implementierung zu erfahren.
Abbildung 3: Drücken und loslassen.
Starke Haptik
Starke Haptik ist eine wachsende Kategorie für haptisches Feedback, die über einzelne impulsbasierte Effekte. Ziel von Android ist die Unterstützung starker Haptik mit hohen Zusammensetzbarkeit und Anpassbarkeit mit sehr detailliertem Detaillierungsgrad. Die folgenden Anwendungsfälle werden in Android 11 oder niedriger unterstützt.
Abbildung 4: Starke Haptik mit gleitender Textur
Abbildung 5: Ziehen und Wischen
Anwendungsfall 1: Gleitende Textur
Wenn sich ein haptischer Effekt wiederholt, während der Finger über eine Touchoberfläche gleitet (für z. B. Ziehen, Wischen oder Erkunden einer Oberfläche mit einer phantomhaptischen Textur. sollten die sich wiederholenden Haptik-Effekte gestochen scharf und subtil sein.
Wenn der Einzeleffekt lebhaft und nicht klar ist, Wiederholungen werden wahrscheinlich verschwunden. Das Ergebnis ist eine lange Aufregung, als mehrere diskrete Signale.
Wenn die Amplitude nicht subtil genug ist, baut sich die wahrgenommene haptische Energie auf durch Wiederholungen, was zu einer starken Haptik am Ende die Wiederholung.
Einfache haptische Oberflächentextur für Wisch- und Ziehgesten implementieren
CLOCK_TICK
und TEXT_HANDLE_MOVE
verwenden in
HapticFeedbackConstants
Diese Konstanten definieren die Eigenschaften von Wiederholung und Amplitude vordefiniert.
Eigenen Effekt erstellen
Um Ihren eigenen Effekt zu erzielen, erstellen Sie ein Design, indem Sie Sequenzen aneinanderreihen
von PRIMITIVE_CLICK
und PRIMITIVE_TICK
in
VibrationEffect.Composition
Sie können die Eigenschaften der Wiederholung und der Amplitudenskala anpassen.
mit addPrimitive(int primitiveID, float scale, int delay)
. Der Support benötigt
die
CAP_COMPOSE_EFFECTS
die Fähigkeit des
Vibrator-HAL-Schnittstelle.
Anwendungsfall 2: Lange Vibration mit Leichtigkeit
Die lange Vibration ist eine sanfte Amplitudenvibration, die von 0 in die Zielamplitude. Lange Vibrationen erzeugen leicht wahrnehmbare Aufmerksamkeit Haptik. Allerdings kann ein plötzliches langes Vibrieren den Nutzer in einer stillen Dunkelheit erschrecken. und erzeugt oft hörbare Brummgeräusche. Um eine weitere sanfte Vibration am Anfang des langen Videos . Dies erzeugt einen sanften Amplitudenübergang, der in Richtung des Zielamplitude.
Ease-In-Effekt anwenden
Hardwarefunktionen der Amplitudenregelung mit
android.os.Vibrator.hasAmplitudeControl()
- Das Ergebnis muss
true
sein, um einen Ease-In-Effekt mit mit unterschiedlicher Amplitude.
- Das Ergebnis muss
Verwenden Sie
VibrationEffect
.createWaveform(timings[], amplitudes[], int repeat)
Passen Sie die Reihe von
timings[]
undamplitudes[]
an, um den Easing-in-Kurve, wie in Abbildung 6 dargestellt.
Abbildung 6: Lange Vibrationskurve
Anwendungsfall 3: Haptik mit Audiokopplung
Audiogekoppelte Haptik sind haptische Muster, die mit dem Audiorhythmus gekoppelt sind. um die Aufmerksamkeit der Nutzenden zu erhalten.
Haptik mit Audiokopplung: Vorteile
Zur Implementierung der audiogekoppelten Haptik solltest du deutliche Haptik mit langen Vibrationen kombinieren. Das starke, aber kurze haptische Gefühl dank des klaren Haptiks sorgt für diskrete rhythmischen Mustern entsprechen. In Kombination mit der hohen Menge an Reizen, Vibrationen liefern, weckt das die Aufmerksamkeit der Nutzenden.
Es ist wichtig, die empfindenden rhythmischen Muster zu berücksichtigen. Wenn es keinen Sinn gibt, nehmen die Nutzenden die haptischen Empfindungen als zufällige Vibrationen wahr und neigen sie zu ignorieren.
Abbildung 7: Beispiel für die Haptik bei Audiopaaren
Haptik mit Audiokopplung: Tipps zur Implementierung
Die Implementierung von audiogekoppelter Haptik setzt ein grundlegendes Verständnis der Inhalte voraus sowohl Audio- als auch haptische Kanäle wiedergeben. Beachten Sie dabei Folgendes.
Verwenden Sie den
MediaPlayer
. oderSoundPool
Klassen.- Assets im OGG-Format mit einem speziellen Metadatenschlüssel
(
ANDROID_HAPTIC
gefolgt von einer Reihe haptischer Kanäle) geben an, haptische Daten und Wiedergabe mitMediaPlayer
undSoundPool
vorhanden.
- Assets im OGG-Format mit einem speziellen Metadatenschlüssel
(
Unterstützung von Haptik und Audiowiedergabe in
audio_policy_configuration.xml
- Ausgabeprofil mit Haptikkanal verwenden
AUDIO_CHANNEL_OUT_HAPTIC_A|B
- Denken Sie bei einem Ausgabestream mit haptischen Kanälen daran, Channels werden als zusätzliche Channels in den Daten dargestellt.
Beispiel
Wenn die Kanalmaske für den Ausgabestream so aussieht:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A
Dann sollte jede Stichprobe so aussehen:
AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A
- Ausgabeprofil mit Haptikkanal verwenden
Ändern
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
zufalse
, um den haptischen Kanal abzuspielen.- Haptische Kanäle sind standardmäßig stummgeschaltet (
true
). - Anwendungsfälle sind unter anderem Klingeltöne und Töne auf der Benutzeroberfläche mit synchronen Haptik und Feedback.
- Haptische Kanäle sind standardmäßig stummgeschaltet (
Der Vibrator HAL muss die Unterstützung externer Steuerungen implementieren.
- Verwenden Sie für HIDL-Implementierungen
setExternalControl(bool enabled) generates (Status status)
- Verwenden Sie für AIDL-Implementierungen
void setExternalControl(in boolean enabled)
- Verwenden Sie für HIDL-Implementierungen
Abbildung 8: Audiogekoppelte Haptik implementieren
Audiogekoppelte Haptik: Haptik-Generator
HapticGenerator
ist ein Audioeffekt
eingeführt, die haptische Daten aus einem Audiokanal
in Echtzeit als audiogekoppelte Haptik wiedergeben.
Der Effekt wird auf AudioTrack
angewendet
wie in Abbildung 9 beschrieben.
Abbildung 9: Haptische Generator-Architektur
Damit Ihr Algorithmus des haptischen Generators eine hochwertige Haptik erzeugt, den Generierungsalgorithmus auf den Vibrationsmotor des Geräts abstimmen, Parameter zur Konfiguration der Filterkette, die auf Audiowellenformen angewendet wird. In diesem Abschnitt werden diese Parameter ausführlich beschrieben und erläutert, wie sie abgestimmt werden können Hardwarespezifikation an.
Resonanzfrequenz für Bandpassfilter
Die Vibrationsresonanzfrequenz ist die Frequenz, mit der ein maximale Ausgabe. Mit diesem Parameter wird ein Antiresonator teilweise die Antwortübertragungsfunktion vereinfachen, um eine größere Bandbreite zu erhalten. Das Android-Framework verknüpft diesen Wert automatisch mit der Ausgabe des Vibrator-HAL-Methode
IVibrator.getResonantFrequency
.Der Standardwert für diesen Parameter ist 150 Hz. Dies kann im hier den Code.
Normalisierungsleistung für langsamen Umschlag
Dieser Parameter bestimmt den Exponenten bei der teilweisen Normalisierung (automatische Verstärkungsregelung). Der Standardwert ist -0.8. Das bedeutet, dass Bei dieser Verstärkungsregelung werden 80% der dynamischen Bereichsvariation entfernt. Dies kann hier im Code geändert werden.
Q-Faktor für Bandstop-Filter
Der Vibrationsqualitätsfaktor (Q-Faktor) wird durch zwei Parameter bestimmt:
Der Null-Q, der Qualitätsfaktor der Nullen im Bandstop-Filter, der bricht die Resonanz teilweise aus.
Der Pol Q, der Qualitätsfaktor der Pole im Bandstop-Filter.
Das Verhältnis dieser beiden Werte begrenzt die Unterdrückung von Resonanz, um niedrigere Frequenzen zu verstärken und den Algorithmus auszuweiten. Beispiel: erhalten die Standardwerte 8 für Null Q und 4 für Pol Q ein Verhältnis von 2, wodurch die Resonanzunterdrückung um den Faktor 2 (6 dB) begrenzt wird. Das Android-Framework verknüpft beide Werte mit der Ausgabe des Vibrator-HAL
IVibrator.getQFactor
-Methode.Wenn die Standardwerte die Dämpfung der Motorstärke nicht berücksichtigen ändern, empfehlen wir, beide Werte gleichzeitig zu ändern und entweder beide erhöhen oder beide verringern. Das Verhältnis von Null Q zu Pol Q sollte größer als 1 sein. Dies kann hier im Code geändert werden.
Eckenfrequenz für Verzerrung
Die Eckenfrequenz wird durch einen Tiefpassfilter angewendet, der eine geringe Vibration und verstärkt die höheren Werte mithilfe einer kubischen Verzerrung. Die Standardeinstellung ist 300 Hz. Dies kann hier im Code geändert werden.
Eingangsverstärkung und Kubusgrenzwert für Verzerrung
Diese Parameter werden von einem nicht linearen Verzerrungsfilter verwendet, der auf das eine Eingangswellenform, die die Amplitude der Signale mit niedrigerer Frequenz dämpft, erhöht sich die Häufigkeit.
- Der Standardwert für den Eingabeverstärkungsfaktor ist 0.3.
- Der Standardwert für den Cube-Schwellenwert ist 0.1.
Wir empfehlen, beide Werte zusammen zu ändern. Sie befinden sich im Code, hier.
Weitere Informationen zu der von diesem Filter angewendeten Funktion finden Sie im Implementierung finden Sie hier. Um mehr darüber zu erfahren, wie diese beiden Parameter die Ausgabe beeinflussen, empfehlen, die Frequenzreaktionen der Filter darzustellen und zu beobachten, ändern sich die Häufigkeitsantworten mit verschiedenen Parameterwerten.
Ausgangsverstärkung für Verzerrung
Mit diesem Parameter wird die endgültige Amplitude der Vibration festgelegt. Es ist ein letzter Vorteil wird nach einem weichen Grenzwert angewendet, der die Amplituden der Vibration auf einen niedrigeren Wert begrenzt als 1. Der Standardwert ist 1.5 und kann im Code geändert werden. hier. Ist die Vibration zu gering, erhöhen Sie den Wert. Wenn Sie die Klapper an der Hardware, stelle den Wert herunter.