Vibration sur Android : comment contrôler la fréquence et l'amplitude (Kotlin)

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi contrôler la vibration sur Android ? Du « dring » au chef-d'œuvre haptique

\n\n

Avez-vous déjà réfléchi à pourquoi certaines applications vibrent de manière agréable et précise, tandis que d'autres ressemblent à une perceuse du voisin ? Tout est une question de fréquence et d'amplitude de vibration. Sur Stack Overflow, la question « How to make an Android device vibrate with different frequency? » a recueilli des milliers de vues – et ce n'est pas un hasard. Les développeurs ne veulent pas simplement « activer la vibration », mais créer un retour haptique significatif : un toucher léger, un signal d'alarme pulsé ou l'imitation d'un bouton mécanique.

\n\n

Dans cet article, nous allons voir comment contrôler la vibration sur Android avec Kotlin. Vous découvrirez quelles API existent, comment elles ont évolué d'Android 8 à Android 14, et quelle approche choisir pour votre projet. C'est parti !

\n\n

Bref historique : de Vibrator à VibratorManager

\n\n

Pendant longtemps, les développeurs Android utilisaient la classe Vibrator et la méthode vibrate(long milliseconds). Simple, mais limité : aucun contrôle sur la fréquence. Avec l'arrivée d'Android 8 (API 26), Google a introduit VibrationEffect – un outil puissant pour créer des motifs de vibration complexes. Et dans Android 12 (API 31), VibratorManager a été ajouté, permettant de gérer plusieurs vibreurs (par exemple sur les appareils pliables).

\n\n

Aujourd'hui, nous avons trois approches principales :

\n
    \n
  • Vibrator + VibrationEffect (API 26+) – basique mais flexible.
  • \n
  • VibratorManager (API 31+) – moderne, pour les appareils multi-vibreurs.
  • \n
  • Vibrator.vibrate() obsolète – uniquement pour la rétrocompatibilité.
  • \n
\n\n

Nous nous concentrerons sur les deux premières, car elles offrent un contrôle sur la fréquence et l'amplitude.

\n\n

Préparation : autorisation de vibration

\n\n

Avant de déclencher un « tremblement de terre », n'oubliez pas d'ajouter l'autorisation dans AndroidManifest.xml :

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

Sans cela, votre code sera simplement ignoré – aucune erreur, mais aucune vibration non plus.

\n\n

Méthode 1 : VibrationEffect – contrôle de la fréquence et de l'amplitude (API 26+)

\n\n

La classe VibrationEffect permet de créer des vibrations avec une fréquence donnée (via l'amplitude) et une durée. La fréquence sur Android n'est pas définie directement en hertz – on utilise plutôt l'amplitude (0–255), qui est convertie matériellement en fréquence. Plus l'amplitude est élevée, plus la vibration est intense.

\n\n

Vibration simple avec amplitude

\n\n
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator\n\n// Vibration de 500 ms avec amplitude maximale (255)\nval effect = VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)\nvibrator.vibrate(effect)
\n\n

Vibration avec différentes fréquences (amplitudes)

\n\n

Vous voulez une vibration faible ? Spécifiez une amplitude de 50 :

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

L'amplitude 255 est maximale, 1 est à peine perceptible. Expérimentez !

\n\n

Motifs : vibration avec pauses

\n\n

Parfois, on a besoin non pas d'un simple « dring », mais d'une pulsation. Utilisez createWaveform :

\n
val timings = longArrayOf(0, 200, 100, 300)  // pause, vibration, pause, vibration\nval amplitudes = intArrayOf(0, 200, 0, 150)  // amplitude pour chaque étape\n\nval pattern = VibrationEffect.createWaveform(timings, amplitudes, -1)  // -1 = ne pas répéter\nvibrator.vibrate(pattern)
\n\n

Le premier élément de timings est le délai initial. On met généralement 0. amplitudes doit avoir la même longueur. Si vous passez null au lieu du tableau d'amplitudes, l'amplitude maximale sera utilisée à toutes les étapes.

\n\n

Méthode 2 : VibratorManager – pour les appareils modernes (API 31+)

\n\n

À partir d'Android 12, il est recommandé d'utiliser VibratorManager

Blogs

Book Recommendations