web-dev-qa-db-fra.com

Android vibrate est obsolète. Comment utiliser VibrationEffect dans Android> = API 26?

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 VibrationEffectcreateOneShot qui prend 2 paramètres: intervalle et amplitude.  enter image description here

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);
    }
}
25
Hitesh Sahu

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

16
Kapil G

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

5
Bob

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.

1
jojois74

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. 

1
hardysim

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)
    }
}
0
Aolphn