我正在使用Android的VIBRATOR_SERVICE
为按键触摸提供触觉反馈。
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300);
Android Studio警告我不推荐使用方法vibrate(interval)
我应该使用VibrationEffect
来获取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);
}
}
答案 0 :(得分:16)
幅度是一个int值。它的振动强度。这必须是1到255之间的值,或DEFAULT_AMPLITUDE
,即-1。
您可以将其用作VibrationEffect.DEFAULT_AMPLITUDE
更多详情here
答案 1 :(得分:6)
您可以将此用于触觉反馈(振动):
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
HapticFeedbackConstants
中还有其他常量,例如VIRTUAL_KEY
,KEYBOARD_TAP
......
答案 2 :(得分:4)
与科特林
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)
}
}
答案 3 :(得分:1)
答案 4 :(得分:1)
我偶然发现了这一点,发现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)
,因此无需使用其他功能。
答案 5 :(得分:0)
搜索并安装 Xamarin.Essentials
try {
var duration = TimeSpan.FromMilliseconds(300);
Vibration.Vibrate(duration);
}
catch (FeatureNotSupportedException ex){}
catch (Exception ex){}
答案 6 :(得分:0)
// Vibrates the device for 100 milliseconds.
fun vibrateDevice(context: Context) {
val vibrator = getSystemService(context, Vibrator::class.java)
vibrator?.let {
if (Build.VERSION.SDK_INT >= 26) {
it.vibrate(VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
@Suppress("DEPRECATION")
it.vibrate(100)
}
}
}
调用以下函数:
vibrateDevice(requireContext())
确保您按如下所示向AndroidManifest.xml添加权限:
<uses-permission android:name="android.permission.VIBRATE"/>
请注意,您无需在运行时征得使用振动的许可。
您需要在else
子句中禁止弃用,因为该警告来自较新的SDK。
答案 7 :(得分:0)
为我工作kotlin ext fun
为达到触觉效果,振动需要5毫秒!! (SHORT_HAPTIC_FEEDBACK_DURATION
)
fun Context.performHapticFeedback() {
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val vibrationEffect = VibrationEffect.createOneShot(HAPTIC_FEEDBACK_DURATION, VibrationEffect.DEFAULT_AMPLITUDE)
vibrator.vibrate(vibrationEffect)
} else {
vibrator.vibrate(TimeUnit.MILLISECONDS.toMillis(SHORT_HAPTIC_FEEDBACK_DURATION))
}
}
private const val SHORT_HAPTIC_FEEDBACK_DURATION = 5L
用法
addOnItemTouchListener(ItemTouchListener { position, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
context.performHapticFeedback()
}
})
权限
<uses-permission android:name="android.permission.VIBRATE"/>
祝你好运✌:))