Warum Vibration auf Android steuern? Vom „Piep“ zum haptischen Meisterwerk
\n\nHaben Sie sich jemals gefragt, warum manche Apps angenehm und präzise vibrieren und andere wie eine Bohrmaschine hinter der Wand? Es liegt an der Frequenz und Amplitude der Vibration. Auf Stack Overflow hat die Frage „How to make an Android device vibrate with different frequency?“ tausende Aufrufe – und das nicht ohne Grund. Entwickler wollen nicht einfach nur „Vibration einschalten“, sondern ein sinnvolles haptisches Feedback erzeugen: eine leichte Berührung, ein pulsierendes Alarmsignal oder die Nachahmung eines mechanischen Tastendrucks.
\n\nIn diesem Artikel analysieren wir, wie Sie Vibrationen auf Android mit Kotlin steuern können. Sie erfahren, welche APIs es gibt, wie sie sich von Android 8 bis Android 14 entwickelt haben und welchen Ansatz Sie für Ihr Projekt wählen sollten. Los geht's!
\n\nEin kurzer historischer Exkurs: Von Vibrator zu VibratorManager
\n\nLange Zeit verwendeten Android-Entwickler die Klasse Vibrator und die Methode vibrate(long milliseconds). Einfach, aber traurig: keine Kontrolle über die Frequenz. Mit dem Erscheinen von Android 8 (API 26) führte Google VibrationEffect ein – ein leistungsstarkes Werkzeug zur Erstellung komplexer Vibrationsmuster. Und mit Android 12 (API 31) kam VibratorManager hinzu, der die Steuerung mehrerer Vibratoren (z. B. bei faltbaren Geräten) ermöglicht.
Heute haben wir drei Hauptansätze:
\n- \n
- Vibrator + VibrationEffect (API 26+) – grundlegend, aber flexibel. \n
- VibratorManager (API 31+) – modern, für Multivibrator-Geräte. \n
- Veralteter Vibrator.vibrate() – nur für Abwärtskompatibilität. \n
Wir konzentrieren uns auf die ersten beiden, da sie Kontrolle über Frequenz und Amplitude bieten.
\n\nVorbereitung: Berechtigung für Vibration
\n\nBevor Sie ein „Erdbeben“ auslösen, vergessen Sie nicht, die Berechtigung in der AndroidManifest.xml hinzuzufügen:
<uses-permission android:name="android.permission.VIBRATE" />\n\nOhne diese wird Ihr Code einfach ignoriert – keine Fehler, aber auch keine Vibration.
\n\nMethode 1: VibrationEffect – Steuerung von Frequenz und Amplitude (API 26+)
\n\nDie Klasse VibrationEffect ermöglicht es, Vibrationen mit einer bestimmten Frequenz (über die Amplitude) und Dauer zu erzeugen. Die Frequenz wird in Android nicht direkt in Hertz angegeben – stattdessen wird die Amplitude (0–255) verwendet, die hardwaremäßig in eine Frequenz umgewandelt wird. Je höher die Amplitude, desto intensiver die Vibration.
Einfache Vibration mit Amplitude
\n\nval vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator\n\n// Vibration 500 ms mit maximaler Amplitude (255)\nval effect = VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)\nvibrator.vibrate(effect)\n\nVibration mit unterschiedlicher Frequenz (Amplitude)
\n\nMöchten Sie eine schwache Vibration? Geben Sie eine Amplitude von 50 an:
\nval weakVibration = VibrationEffect.createOneShot(300, 50)\nvibrator.vibrate(weakVibration)\n\nAmplitude 255 ist das Maximum, 1 ist kaum wahrnehmbar. Experimentieren Sie!
\n\nMuster: Vibration mit Pausen
\n\nManchmal braucht man nicht nur ein „Piep“, sondern eine Pulsation. Verwenden Sie createWaveform:
val timings = longArrayOf(0, 200, 100, 300) // Pause, Vibration, Pause, Vibration\nval amplitudes = intArrayOf(0, 200, 0, 150) // Amplitude für jede Phase\n\nval pattern = VibrationEffect.createWaveform(timings, amplitudes, -1) // -1 = nicht wiederholen\nvibrator.vibrate(pattern)\n\nDas erste Element von timings ist die anfängliche Verzögerung. Normalerweise setzt man 0. amplitudes müssen die gleiche Länge haben. Wenn Sie null anstelle des Amplitudenarrays übergeben, wird in allen Phasen die maximale Amplitude verwendet.
Methode 2: VibratorManager – für moderne Geräte (API 31+)
\n\nAb Android 12 wird die Verwendung von VibratorManager empfohlen.