Vibration auf Android: So steuern Sie Frequenz und Amplitude (Kotlin)

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Vibration auf Android steuern? Vom „Piep“ zum haptischen Meisterwerk

\n\n

Haben 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\n

In 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\n

Ein kurzer historischer Exkurs: Von Vibrator zu VibratorManager

\n\n

Lange 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.

\n\n

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
\n\n

Wir konzentrieren uns auf die ersten beiden, da sie Kontrolle über Frequenz und Amplitude bieten.

\n\n

Vorbereitung: Berechtigung für Vibration

\n\n

Bevor Sie ein „Erdbeben“ auslösen, vergessen Sie nicht, die Berechtigung in der AndroidManifest.xml hinzuzufügen:

\n
<uses-permission android:name="android.permission.VIBRATE" />
\n\n

Ohne diese wird Ihr Code einfach ignoriert – keine Fehler, aber auch keine Vibration.

\n\n

Methode 1: VibrationEffect – Steuerung von Frequenz und Amplitude (API 26+)

\n\n

Die 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.

\n\n

Einfache Vibration mit Amplitude

\n\n
val 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\n

Vibration mit unterschiedlicher Frequenz (Amplitude)

\n\n

Möchten Sie eine schwache Vibration? Geben Sie eine Amplitude von 50 an:

\n
val weakVibration = VibrationEffect.createOneShot(300, 50)\nvibrator.vibrate(weakVibration)
\n\n

Amplitude 255 ist das Maximum, 1 ist kaum wahrnehmbar. Experimentieren Sie!

\n\n

Muster: Vibration mit Pausen

\n\n

Manchmal braucht man nicht nur ein „Piep“, sondern eine Pulsation. Verwenden Sie createWaveform:

\n
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\n

Das 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.

\n\n

Methode 2: VibratorManager – für moderne Geräte (API 31+)

\n\n

Ab Android 12 wird die Verwendung von VibratorManager empfohlen.

Blogs

Buchempfehlungen