Ich benutze den VIBRATOR_SERVICE
von Android, um eine haptische Rückmeldung für eine Tastenberührung zu geben.
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300);
Android Studio gibt mir eine Warnung, dass die Methode vibrate(interval)
veraltet ist. Ich sollte VibrationEffect
für API> 23 verwenden.
Also habe ich die Methode VibrationEffect
voncreateOneShot
verwendet, die zwei Parameter benötigt: Intervall und Amplitude.
Ich habe versucht, danach zu suchen, habe aber keine Ahnung, was als amplitude
gelten soll.
Update hinzugefügt 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);
}
}
Amplitude ist ein int-Wert. Es ist die Stärke der Vibration. Dies muss ein Wert zwischen 1 und 255 sein, oder DEFAULT_AMPLITUDE
, der -1 ist.
Sie können es als VibrationEffect.DEFAULT_AMPLITUDE
verwenden
Weitere Details hier
Sie können dies für haptisches Feedback (Vibration) verwenden:
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
Es gibt andere Konstanten in HapticFeedbackConstants
wie VIRTUAL_KEY
, KEYBOARD_TAP
...
Diese Bibliothek kann Ihnen helfen: https://github.com/josephrubin/Rumble-4-Android
Alles was Sie benötigen, ist Rumble.once(150);
Es behandelt die API-Versionen für Sie.
Ich bin gerade darüber gestolpert und habe herausgefunden, dass VibrationEffect.createWaveform()
grundsätzlich das gleiche long[]
- Muster wie das alte vibrate()
verwendet.
Aus diesem Grund können Sie Ihr vorhandenes Muster wie folgt wiederverwenden (dies ist eine Kotlin-Erweiterungsfunktion):
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)
}
}
Anstelle von VibrationEffect.createOneShot()
können Sie auch ein Muster verwenden (z. B. longArrayOf(0, 150)
), sodass Sie keine anderen Funktionen verwenden müssen.
mit 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)
}
}