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