我尝试使用以下代码在 Android(API 34、Android 11)中的应用程序上进行振动:
Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
long[] pattern = {0, 500, 500};
v.vibrate(VibrationEffect.createWaveform(pattern, 0));
当设备处于“正常”模式(声音设置)时,振动起作用,但当设备处于“仅振动”模式时,振动不起作用。
在 Jetpack Compose 中触发振动,同时遵守 设备的声音配置文件(例如静音模式),您可以使用 AudioManager 在尝试之前检查当前铃声模式 振动设备。
val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
if (audioManager.ringerMode != AudioManager.RINGER_MODE_SILENT) {
val vibrator = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
val vibratorManager = context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
vibratorManager.defaultVibrator
} else {
context.getSystemService(Vibrator::class.java)
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
vibrator.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
vibrator.vibrate(500)
}