Android 振动已弃用。如何在 Android>= API 26 中使用 VibrationEffect?
Android vibrate is deprecated. How to use VibrationEffect in Android>= API 26?
我正在使用 Android 的 VIBRATOR_SERVICE
为按钮触摸提供触觉反馈。
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300);
Android Studio 警告我方法 vibrate(interval)
已弃用 我应该对 API>23 使用 VibrationEffect
。
所以我使用了VibrationEffect
的方法createOneShot
,它有两个参数:间隔和振幅。
我试着搜索它,但不知道要传递什么 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);
}
}
Amplitude 是一个整数值。它的振动强度。这必须是 1 到 255 之间的值,或者 DEFAULT_AMPLITUDE
即 -1。
您可以将其用作 VibrationEffect.DEFAULT_AMPLITUDE
更多详情here
您可以将其用于触觉反馈(振动):
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
HapticFeedbackConstants
中还有其他常量可用,例如 VIRTUAL_KEY
、KEYBOARD_TAP
...
这个库可以帮助你:
https://github.com/josephrubin/Rumble-4-Android
你只需要
Rumble.once(150);
它为您处理 API 个版本。
我偶然发现了这个,发现 VibrationEffect.createWaveform()
基本上使用与旧 vibrate()
相同的 long[]
模式。
因此,您可以像这样重用现有模式(这是 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)
}
}
您也可以使用模式(例如 longArrayOf(0, 150)
)代替 VibrationEffect.createOneShot()
,因此无需使用不同的函数。
使用科特林
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)
}
}
打开管理 NuGet 包
搜索并安装 Xamarin.Essentials
try {
var duration = TimeSpan.FromMilliseconds(300);
Vibration.Vibrate(duration);
}
catch (FeatureNotSupportedException ex){}
catch (Exception ex){}
已针对 Kotlin 更新
// 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。
为我工作kotlin ext fun
对于触觉效果,vibro 有 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"/>
祝你好运✌:))
我正在使用 Android 的 VIBRATOR_SERVICE
为按钮触摸提供触觉反馈。
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300);
Android Studio 警告我方法 vibrate(interval)
已弃用 我应该对 API>23 使用 VibrationEffect
。
所以我使用了VibrationEffect
的方法createOneShot
,它有两个参数:间隔和振幅。
我试着搜索它,但不知道要传递什么 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);
}
}
Amplitude 是一个整数值。它的振动强度。这必须是 1 到 255 之间的值,或者 DEFAULT_AMPLITUDE
即 -1。
您可以将其用作 VibrationEffect.DEFAULT_AMPLITUDE
更多详情here
您可以将其用于触觉反馈(振动):
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
HapticFeedbackConstants
中还有其他常量可用,例如 VIRTUAL_KEY
、KEYBOARD_TAP
...
这个库可以帮助你: https://github.com/josephrubin/Rumble-4-Android
你只需要
Rumble.once(150);
它为您处理 API 个版本。
我偶然发现了这个,发现 VibrationEffect.createWaveform()
基本上使用与旧 vibrate()
相同的 long[]
模式。
因此,您可以像这样重用现有模式(这是 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)
}
}
您也可以使用模式(例如 longArrayOf(0, 150)
)代替 VibrationEffect.createOneShot()
,因此无需使用不同的函数。
使用科特林
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)
}
}
搜索并安装 Xamarin.Essentials
try {
var duration = TimeSpan.FromMilliseconds(300);
Vibration.Vibrate(duration);
}
catch (FeatureNotSupportedException ex){}
catch (Exception ex){}
已针对 Kotlin 更新
// 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。
为我工作kotlin ext fun
对于触觉效果,vibro 有 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"/>
祝你好运✌:))