vibrationeffect android android-vibration android-8.0-oreo

La vibración de Android está en desuso. ¿Cómo usar VibrationEffect en Android>=API 26?



vibrate android (5)

Esta biblioteca puede ayudarle: https://github.com/josephrubin/Rumble-4-Android

Todo lo que necesitas es Rumble.once(150);

Maneja las versiones de API por ti.

Estoy usando VIBRATOR_SERVICE de Android para dar una retroalimentación táctil con solo tocar un botón.

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

Android Studio me advierte que el método de vibrate(interval) está en desuso. Debería usar VibrationEffect para API> 23.

Así que utilicé el método createOneShot que toma 2 parámetros: intervalo y amplitud.

Intenté buscarlo, pero no tengo idea de qué pasar como amplitude , ¿alguien tiene idea de cómo usarlo?

Actualizar código añadido

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


La amplitud es un valor int. Es la fuerza de la vibración. Este debe ser un valor entre 1 y 255, o DEFAULT_AMPLITUDE que es -1.

Puedes usarlo como VibrationEffect.DEFAULT_AMPLITUDE

Más detalles here


Me topé con esto y descubrí que VibrationEffect.createWaveform() básicamente usa el mismo patrón long[] largo que el anterior vibrate() .

Debido a esto, puede reutilizar su patrón existente como tal (esta es una función de extensión 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) } }

Y en lugar de VibrationEffect.createOneShot() también puede usar un patrón (por ejemplo, longArrayOf(0, 150) ), por lo que no es necesario usar funciones diferentes.


Puedes usar esto para retroalimentación háptica (vibración):

view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);

Hay otras constantes disponibles en HapticFeedbackConstants como VIRTUAL_KEY , KEYBOARD_TAP ...


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