我正在使用Android的VIBRATOR_SERVICE
为按键触摸提供触觉反馈。
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300);
Android Studio警告我不推荐使用vibrate(interval)
方法我应该使用VibrationEffect
for API> 23。
所以我使用VibrationEffect
的方法createOneShot
,它采用2个参数:间隔和振幅。
我试着寻找它,但不知道要传递什么作为amplitude
,任何人都知道如何使用它?
更新添加的代码
// 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);
}
}
幅度是一个int值。它的振动强度。这必须是介于1和255之间的值,或DEFAULT_AMPLITUDE
为-1。
你可以用它作为VibrationEffect.DEFAULT_AMPLITUDE
更多细节here
用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)
}
}
您可以将此用于触觉反馈(振动):
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
在HapticFeedbackConstants
中还有其他常量,如VIRTUAL_KEY
,KEYBOARD_TAP
......
我偶然发现了这一点,发现VibrationEffect.createWaveform()
基本上使用与旧long[]
相同的vibrate()
模式。
因此,您可以像这样重用现有模式(这是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)
}
}
而不是VibrationEffect.createOneShot()
你也可以使用一个模式(例如longArrayOf(0, 150)
),所以不需要使用不同的功能。