Pourquoi contrôler la vibration sur Android ? Du « dring » au chef-d'œuvre haptique
\n\nAvez-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\nDans 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\nBref historique : de Vibrator à VibratorManager
\n\nPendant 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).
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
Nous nous concentrerons sur les deux premières, car elles offrent un contrôle sur la fréquence et l'amplitude.
\n\nPréparation : autorisation de vibration
\n\nAvant de déclencher un « tremblement de terre », n'oubliez pas d'ajouter l'autorisation dans AndroidManifest.xml :
<uses-permission android:name="android.permission.VIBRATE" />\n\nSans cela, votre code sera simplement ignoré – aucune erreur, mais aucune vibration non plus.
\n\nMéthode 1 : VibrationEffect – contrôle de la fréquence et de l'amplitude (API 26+)
\n\nLa 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.
Vibration simple avec amplitude
\n\nval 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\nVibration avec différentes fréquences (amplitudes)
\n\nVous voulez une vibration faible ? Spécifiez une amplitude de 50 :
\nval weakVibration = VibrationEffect.createOneShot(300, 50)\nvibrator.vibrate(weakVibration)\n\nL'amplitude 255 est maximale, 1 est à peine perceptible. Expérimentez !
\n\nMotifs : vibration avec pauses
\n\nParfois, on a besoin non pas d'un simple « dring », mais d'une pulsation. Utilisez createWaveform :
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\nLe 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.
Méthode 2 : VibratorManager – pour les appareils modernes (API 31+)
\n\nÀ partir d'Android 12, il est recommandé d'utiliser VibratorManager