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();
}