Android 触感反馈指南:玩转 Vibrator 振动器
在 Android 中,振动器(Vibrator)是一种系统服务,可以让设备振动,实现提示或提醒效果。下面详细介绍 Vibrator 的使用方法,包括权限要求、基本 API、常见用法等。
1. 添加权限
如果 targetSdkVersion ≤ 32(Android 13 及以下),需要在 Manifest 文件里申请震动权限:
<uses-permission android:name="android.permission.VIBRATE"/>
从 Android 13(API 33)开始,普通应用使用短振动不再强制要求权限,只有特殊场景(如闹钟/提醒类APP等)才需要特殊权限。
2. 获取 Vibrator 系统服务
在 Activity 或 Context 中,可以这样获取 Vibrator:
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
3. 基本振动方法
简单振动(毫秒数),让设备振动一定时间(ms),如振动 500 毫秒:
vibrator.vibrate(500) // 已废弃,建议使用新版
推荐用法:使用 VibrationEffect,Android API 26(Android 8.0)及以上建议这样:
// 振动持续500ms,振幅默认为1(最大)
val vibrationEffect = VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)
vibrator.vibrate(vibrationEffect)
4. 自定义振动模式
实现“震动-停止-震动-停止”的模式(自定义节奏):
val timings = longArrayOf(0, 200, 100, 300) // 先立刻开始,振动200ms,停100ms,再振动300ms
val amplitudes = intArrayOf(0, 255, 0, 128) // 振动幅度:0表示不振动,255最大、128中等
val effect = VibrationEffect.createWaveform(timings, amplitudes, -1) // -1表示不重复
vibrator.vibrate(effect)
5. 停止振动
随时停止设备振动:
vibrator.cancel()
6. 兼容性处理(建议)
旧版 Vibrator 和新版 API 略有不同,建议判断设备兼容性:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val effect = VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)
vibrator.vibrate(effect)
} else {
vibrator.vibrate(500)
}
7. 注意事项
部分设备(如部分平板、模拟器、特殊机型)可能没有振动硬件,实际效果会根据设备而异,可用 vibrator.hasVibrator() 检查。使用振动应考虑用户体验,不要频繁或无提示地振动。
fun vibrate(context: Context, milliseconds: Long) {
val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
if (vibrator.hasVibrator()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val effect = VibrationEffect.createOneShot(milliseconds, VibrationEffect.DEFAULT_AMPLITUDE)
vibrator.vibrate(effect)
} else {
vibrator.vibrate(milliseconds)
}
}
}