If you just want default ringtone, call setDefault(Notification.DEFAULT_SOUND);
If you just want default vibrate, call setDefault(Notification.DEFAULT_VIBRATE);
If you just want default lights, call setDefault(Notification.DEFAULT_LIGHTS);
If you need a custom ringtone, call setSound(ringtoneUri), but don't call setDefault(DEFAULT_ALL) or setDefault(DEFAULT_SOUND).
Because setDefault(DEFAULT_ALL) or setDefault(DEFAULT_SOUND) make setSound(ringtoneUri) useless.
Check here about how to use Ringtone Picker to get a ringtone Uri.
http://codeviki.blogspot.tw/2015/06/android-show-ringtone-picker-activity.html
Check here about how to get ringtone title from ringtone Uri.
http://codeviki.blogspot.tw/2015/06/android-get-ringtone-title-from-ringtone-uri.html
static Notification buildNotification( boolean vibrateEnabled, boolean lightsEnabled, String ringtoneUriString) { int defaults = 0; // set vibrate to defaults if (vibrateEnabled) { // use default vibrate pattern defaults |= Notification.DEFAULT_VIBRATE; } // set lights to defaults if (lightsEnabled) { // use default light blink pattern defaults |= Notification.DEFAULT_LIGHTS; } // parse ringtone Uri ringtoneUri = null; try { ringtoneUri = Uri.parse(ringtoneUriString); } catch (Exception ignored) { Logcat.w(ignored, "Parse notification ringtone uri fail. " + "ringtoneUriString = ", ringtoneUriString); // if parse ringtone fail, use default ringtone defaults |= Notification.DEFAULT_SOUND; } NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.my_notification_icon) .setContentTitle("title") .setContentText("contentText") .setAutoCancel(true) .setDefaults(defaults); // if ringtoneUriString is empty string, the uri won't be null if (!ringtoneUriString.isEmpty() && ringtoneUri != null) { builder.setSound(ringtoneUri); } return builder.build(); }