I'm writing an app using notification. Google developer guidelines encourages developers to provide settings to customize the notifications (disable vibration, set notification sound...), so I am trying to disable vibration for notifications if the user set it that way.
I am using NotificationCompat.Builder
to create the notification, like this:
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);
I tried different ways to disable notifications:
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);`
I also tried to build the notification and change values on the resulting object:
Notification notification = notificationBuilder.build(); notification.vibrate = null;
But the phone still vibrates when the notification appears.
How can I disable vibration for notifications?
Go to Settings -> Sounds & Haptics and scroll down to the SOUNDS AND VIBRATION PATTERNS SECTION. Then go into each individual option (apart from Ringtone), go to Vibration and set it to None. For individual applications, you will have to go to Settings, Notifications, go into each app and turn Sounds off.
After a long trial & error session, I think I finally understood what's wrong.
The problem lies in this instruction notificationBuilder.setDefaults(Notification.DEFAULT_ALL)
.
No matter what parameter you pass to notificationBuilder.setVibrate()
after setting DEFAULT_ALL
or DEFAULT_VIBRATE
will be silently discarded. Someone at Google must have decided to give a higher precedence to setDefaults
than to setVibrate
.
This is how I ended up disabling vibration for notifications in my app:
notificationBuilder.setDefaults(Notification.DEFAULT_LIGHT | Notification.DEFAULT_SOUND) .setVibrate(new long[]{0L}); // Passing null here silently fails
This works but doesn't feel right to initialize a new long[]
just to disable the vibration.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With