Почему вибрация не работает на Android P (API 28)?

Я пытаюсь реализовать тактильную обратную связь при изменении значения панели поиска. Он корректно работает на Android pre-P. На Android P это не работает вообще. Код:

private val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator?
private val effect by lazy { VibrationEffect.createOneShot(VIBRATION_DURATION, 50)}
...

fun vibrate() {
    if (vibrator == null || !vibrator.hasVibrator()) {
        return
    }
    vibrator.cancel()
    vibrator.vibrate(effect)

3 ответа

Оказывается, пользователь должен включить сенсорную вибрацию в Настройках -> Специальные возможности -> Вибрация -> Сенсорная вибрация: введите описание изображения здесь

Без этого короткая вибрация (менее 5 секунд) не сработает. Для меня это не совсем интуитивно понятно, поэтому я решил опубликовать это здесь

Именно то, что сказал Майк. а для android Pie - Настройка-> Звуки и вибрация -> Системные звуки и вибрация -> Сенсорная вибрация

Вы можете использовать вибрацию (атрибуты VibrationEffect vibe, VibrationAttributes)

(Примечание. До уровня API 33 вам необходимо использовать AudioAttributes вместо атрибутов вибрации)

Установив для параметра «Использование VibrationAttributes/AudioAttributes», например, значение USAGE_NOTIFICATION, вы, по крайней мере, получите вибрацию, включенную по умолчанию. Однако пользователь по-прежнему может отключить вибрацию уведомлений в настройках.

Другие вопросы по тегам