J'utilise le VIBRATOR_SERVICE
d'Android pour donner un retour haptique lors d'une pression sur un bouton.
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300);
Android Studio m'avertit que la méthode vibrate(interval)
est obsolète. Je devrais utiliser VibrationEffect
pour API> 23.
J'ai donc utilisé la méthode VibrationEffect
createOneShot
qui prend 2 paramètres: intervalle et amplitude.
J'ai essayé de le rechercher mais je n'ai pas la moindre idée de ce qu'il faut transmettre en tant que amplitude
. Quelqu'un a-t-il une idée de la façon de l'utiliser?
Mise à jour du code ajouté
// Vibrate for 150 milliseconds
private void shakeItBaby() {
if (Build.VERSION.SDK_INT >= 26) {
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150,10));
} else {
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150);
}
}
L'amplitude est une valeur int. C'est la force de la vibration. Cela doit être une valeur entre 1 et 255, ou DEFAULT_AMPLITUDE
qui est -1.
Vous pouvez l'utiliser comme VibrationEffect.DEFAULT_AMPLITUDE
Plus de détails ici
Vous pouvez utiliser ceci pour le retour haptique (vibration):
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
Il existe d'autres constantes disponibles dans HapticFeedbackConstants
comme VIRTUAL_KEY
, KEYBOARD_TAP
...
Cette bibliothèque peut vous aider: https://github.com/josephrubin/Rumble-4-Android
Tout ce dont vous avez besoin est Rumble.once(150);
Il gère les versions de l'API pour vous.
Je suis tombé sur cela et ai découvert que VibrationEffect.createWaveform()
utilise essentiellement le même motif long[]
- que l'ancien vibrate()
.
De ce fait, vous pouvez réutiliser votre modèle existant comme ceci (il s’agit d’une fonction d’extension de Kotlin):
fun Context.vibrate(pattern: LongArray) {
val vibrator =
applicationContext.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator? ?: return
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
vibrator.vibrate(
VibrationEffect.createWaveform(pattern, VibrationEffect.DEFAULT_AMPLITUDE)
)
} else {
@Suppress("DEPRECATION")
vibrator.vibrate(pattern, -1)
}
}
Et au lieu de VibrationEffect.createOneShot()
, vous pouvez également utiliser un modèle (par exemple, longArrayOf(0, 150)
), de sorte qu'il n'est pas nécessaire d'utiliser des fonctions différentes.
avec kotlin
private fun vibrate(){
val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
vibrator.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
vibrator.vibrate(200)
}
}