Уведомление Android вибрирует с NotifiationChannel.enableVibration(false)

С API 26 (Android 8.0) нам нужно определить NotificationChannel для каждого уведомления. Каждый канал имеет свои настройки сбоев (например, вибрация, свет, звук).

Проблема: когда я отключаю вибрацию для этого канала и развертываю ее на телефоне Android 8.0 (обновление безопасности, сентябрь 2017 г.) (Nexus 5X), уведомление все равно вызывает вибрацию и открывается автоматически (всплывающие), которые я не ставил и хочу отключить.

  1. Я регистрирую NotificationChannel в своей MainActivity:

    // Register NotificationChannels needed for API 26+ to display notification messages
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel runningChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID_RUNNING,
                getString(R.string.notification_channel_name_running), NotificationManager.IMPORTANCE_LOW);
        runningChannel.enableLights(false);
        runningChannel.enableVibration(false);
        mNotificationManager.createNotificationChannel(runningChannel);
    }
    
  2. Я установил NotificationChannel для уведомления:

    notification = new NotificationCompat.Builder(context)
                .setContentIntent(onClickPendingIntent)
                .setChannelId(NOTIFICATION_CHANNEL_ID_RUNNING)
                .setOngoing(true)
                .setWhen(System.currentTimeMillis())
                .setAutoCancel(false)
                .build();
    

Обновление (обновление системы безопасности от 5 октября 2017 г.)

Теперь все работает, как и ожидалось, без обходного пути, поэтому я могу выбрать targetSDK 26 (раньше я использовал 25, чтобы избежать этого ложного поведения). В случае, когда в других выпусках есть аналогичная ошибка других телефонов, которые еще не получили новейшее обновление, я отметил обходной путь ниже как принятый ответ.


person hb0    schedule 28.09.2017    source источник
comment
попробовать изменить уровень важности?NotificationManager.IMPORTANCE_HIGH   -  person Arnav M.    schedule 28.09.2017
comment
Спасибо за ваше предложение @ArnavM. Однако это не меняет поведение (по-прежнему вибрирует и всплывает уведомление). Можете ли вы объяснить, почему вы считаете, что это должно было что-то изменить?   -  person hb0    schedule 28.09.2017
comment
связанный момент, о котором нужно позаботиться, чтобы не сделать неправильную реализацию с помощью как enableVibration(), так и setVibrationPattern(), см. здесь: proandroiddev.com/   -  person Ali Asadi    schedule 03.11.2018


Ответы (1)


Кажется, это работает:

runningchannel.setVibrationPattern(new long[]{0, 0, 0, 0,0, 0, 0, 0, 0});

Да, это странно

person Piotr    schedule 04.10.2017
comment
Спасибо @Piotr, я проверю это, как только будет время, и отмечу ваш ответ как правильный, когда он сработает. Ваше здоровье! - person hb0; 09.10.2017
comment
Мой Nexus 5X получил обновление системы от 5 октября 2017 года. После этого обновления у меня не возникает ложного поведения, упомянутого в вопросе. Таким образом, мне не нужно было использовать ваш обходной путь, но он кажется законным, поэтому я отмечаю его как правильный ответ, поскольку другие могут еще не получить новейшее обновление Android 8 или столкнуться с этим ложным поведением в будущих выпусках. Спасибо друг! - person hb0; 11.10.2017
comment
Это сработало для меня. При изменении каналов уведомлений всегда удаляйте и устанавливайте приложение. - person krisDrOid; 01.11.2018
comment
@ hb0 Я хочу отметить, что существует проблема, если вы сделаете неправильную реализацию, посмотрите этот пост proandroiddev.com/ - person Ali Asadi; 03.11.2018
comment
Спасибо за ваш ответ, удаление и установка приложения мне помогли. - person Kevin Ramirez Zavalza; 29.02.2020