Отключить вибрацию для уведомления
Я пишу приложение, используя уведомление. Руководства разработчика Google рекомендуют разработчикам предоставлять настройки для настройки уведомлений (отключить вибрацию, установить звук уведомления...), поэтому я пытаюсь отключить вибрацию для уведомлений, если пользователь установил ее таким образом.
Я использую NotificationCompat.Builder
для создания уведомления, например:
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(Application.getContext())
.setDefaults(Notification.DEFAULT_ALL)
.setPriority(Notification.PRIORITY_MAX)
.setSmallIcon(R.drawable.ic_launcher)
.setLargeIcon(largeIconBitmap)
.setAutoCancel(true)
.setContentIntent(resultPendingIntent)
.setContentTitle(title)
.setContentText(content);
Я попробовал разные способы отключения уведомлений:
notificationBuilder.setVibrate(null);
notificationBuilder.setVibrate(new long[]{0l, 0l});
notificationBuilder.setDefaults(Notification.DEFAULT_ALL | ~Notification.DEFAULT_VIBRATE);
notificationBuilder.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND);`
Я также попытался создать уведомление и изменить значения для результирующего объекта:
Notification notification = notificationBuilder.build();
notification.vibrate = null;
Но при появлении уведомления телефон все еще вибрирует.
Как отключить вибрацию для уведомлений?
Ответы
Ответ 1
После продолжительного сеанса проб и ошибок, я думаю, наконец понял, что случилось.
Проблема заключается в этой инструкции notificationBuilder.setDefaults(Notification.DEFAULT_ALL)
.
Независимо от того, какой параметр вы перейдете к notificationBuilder.setVibrate()
после установки DEFAULT_ALL
или DEFAULT_VIBRATE
, будет тихо отбрасываться. Кто-то из Google должен был решить более высокий приоритет setDefaults
, чем setVibrate
.
Вот как я закончил отключать вибрацию для уведомлений в своем приложении:
notificationBuilder.setDefaults(Notification.DEFAULT_LIGHT | Notification.DEFAULT_SOUND)
.setVibrate(new long[]{0L}); // Passing null here silently fails
Это работает, но не имеет права инициализировать новый long[]
, чтобы отключить вибрацию.
Ответ 2
Они не останавливаются, потому что вы используете "setDefaults(Notification.DEFAULT_ALL)"
, поэтому, если вам нужно остановить вибрацию и звук, удалите эту строку, или если вам нужно использовать звук по умолчанию и остановить вибрацию, я думаю, вы должны использовать setDefaults(Notification.DEFAULT_SOUND)
и т.д..
Ответ 3
.setVibrate(null)
работает для меня - и лучшее решение, чем создание ненужного long [].
Результат: устройство не вибрирует и не ворчит в LogCat.:)
Ответ 4
notification.vibrate = new long[] { -1 };
этот код работает для меня.