Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Disable vibration for a notification

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?

like image 224
nstCactus Avatar asked Jun 03 '14 06:06

nstCactus


People also ask

How do I get my iPhone to stop vibrating for certain Apps?

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.


1 Answers

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.

like image 144
nstCactus Avatar answered Oct 25 '22 07:10

nstCactus