Код: Выделить всё
fun Context.vibrate(wave: Boolean) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
(getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager).apply {
vibrate(
CombinedVibration.createParallel(makeEffect(wave)),
VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_ALARM).build(),
)
}
} else {
@Suppress("DEPRECATION")
(getSystemService(Context.VIBRATOR_SERVICE) as Vibrator).apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
vibrate(makeEffect(wave))
} else {
@Suppress("DEPRECATION")
vibrate(if (wave) 1000 else 500)
}
}
}
}
@RequiresApi(Build.VERSION_CODES.O)
private fun makeEffect(wave: Boolean): VibrationEffect {
return if (wave) {
VibrationEffect.createWaveform(timeInterval, 1)
} else {
VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)
}
}
fun Context.stopVibration(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
(getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager).apply {
cancel()
}
} else {
@Suppress("DEPRECATION")
(getSystemService(Context.VIBRATOR_SERVICE) as Vibrator).apply {
if (hasVibrator()) {
cancel()
}
}
}
}
private val timeInterval = longArrayOf(60, 120, 180, 240, 420, 480)
Почему она не прекращается? Как я могу это исправить?
Подробнее здесь: https://stackoverflow.com/questions/790 ... -vibration
Мобильная версия