62 votes

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

J'utilise Android VIBRATOR_SERVICE pour donner un retour haptique pour un bouton tactile.

 ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300);

Android Studio de me donner des avertissement cette méthode vibrate(interval) est obsolète, je devrais utiliser VibrationEffect pour l'API>23.

J'ai donc utiliséVibrationEffects'méthode createOneShot qui prend 2 paramètres: l'intervalle, et de l'amplitude. enter image description here

J'ai essayé de chercher pour elle, mais n'ai obtenu aucune idée de ce passer comme amplitude, tout le monde a obtenu une idée de comment l'utiliser?

Mise à jour Ajout d'un code

// 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);
    }
}

32voto

Aolphn Points 546

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

25voto

Kapil G Points 3463

L'amplitude est une valeur int. C'est la force de la vibration. Cela doit être une valeur comprise entre 1 et 255, ou DEFAULT_AMPLITUDE qui est -1.

Vous pouvez l'utiliser comme VibrationEffect.DEFAULT_AMPLITUDE

Plus de détails ici

15voto

Dinesh Bob Points 1073

Vous pouvez utiliser ceci pour le retour haptique (vibration):

 view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
 

Il existe d'autres constantes disponibles en HapticFeedbackConstants comme VIRTUAL_KEY , KEYBOARD_TAP ...

4voto

hardysim Points 854

Je suis tombé sur cela et j'ai découvert que VibrationEffect.createWaveform() utilise essentiellement le même long[] modèle - l'ancien modèle vibrate() .

Pour cette raison, 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 motif (par exemple, longArrayOf(0, 150) ), vous évitant ainsi d’utiliser différentes fonctions.

1voto

jojois74 Points 462

Cette bibliothèque peut vous aider: https://github.com/josephrubin/Rumble-4-Android

Tout ce dont vous auriez besoin est Rumble.once(150);

Il gère les versions de l'API pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X