How To Play Sound When A Notification Pops Up?
Solution 1:
You should define a flag to toggle the sound on/off. This could be a boolean value controlled by the second switch. Then check the status of that flag when creating the notification and decide to set or not the sound.
And maybe split the Notification
from the NotificationBuilder
to control the sound.
1- Create the flag being a Class attribute
Switch simpleswitch1;
Switch simpleswitch2;
private Notification notification;
NotificationManager manager;
Notification myNotication;
// Sound disabled by defaultbooleanenableSound=false;
2- Control the flag with the second switch
simpleswitch2.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener() {
@OverridepublicvoidonCheckedChanged(CompoundButton buttonView, boolean isChecked) {
enableSound = isChecked;
}
});
3- Use the NotificationBuilder
to control the sound. Replace this piece of code from first switch
NotificationCompat.BuildernotificationBuilder=newNotificationCompat.Builder(Settings.this, CHANNEL_ID);
notificationBuilder.setSmallIcon(R.drawable.notification);
notificationBuilder.setContentTitle("NOTIFICATION TITLE");
notificationBuilder.setContentText("You have a new notification");
notificationBuilder.setChannelId(CHANNEL_ID);
if (enableSound){
notificationBuilder.setSound(android.provider.Settings.System.DEFAULT_NOTIFICATION_URI);
notificationBuilder.setVibrate(newlong[]{1000,100});
}
Notificationnotification= notificationBuilder.build();
I hope it helps!
UPDATE
I think I know why it's not playing a sound. I've just created a new Android Studio Project and copy-paste your code and the notifications is fired, the sound plays and I can not turn the sound off (just the oppostite). And I'm guessing your problem is related to the notification channel. Then I modify my App and it worked!
First, let me correct myself. The PRIORITY
has been deprecated since api level 26 (which you are using according to @TargetApi(Build.VERSION_CODES.O)
) and what you should use instead is the IMPORTANCE
in the NotificationChannel
. The problem with a notification channel is that you can not edit it once created (unless you uninstall your app). So if at first you where using a low importance channel and then change it to a high one it won't take any effect.
So what you really need is two notifications channel: one with sound and one silent, and then select the appropiate channel with the help of the previously created flag.
So now, the code for the first switch would be: Notice I re-arrange it so I first create the NotificationChannel (for better readability)
if (isChecked){
intnotifyID=1;
StringCHANNEL_SOUND_ID="channel SOUND";// The id of the channel.CharSequenceNAME_SOUND="channel 1";// The user-visible name of the channel.StringCHANNEL_SILENT_ID="channel SILENT";// The id of the channel.CharSequenceNAME_SILENT="channel 2";// The user-visible name of the channel.intimportance_sound= NotificationManager.IMPORTANCE_HIGH;
intimportance_silent= NotificationManager.IMPORTANCE_LOW;
NotificationChannelmChannel_sound=newNotificationChannel(CHANNEL_SOUND_ID, NAME_SOUND, importance_sound);
NotificationChannelmChannel_silent=newNotificationChannel(CHANNEL_SILENT_ID, NAME_SILENT, importance_silent);
// Crete both notification channelsNotificationManagermNotificationManager=
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannel(mChannel_sound);
mNotificationManager.createNotificationChannel(mChannel_silent);
Intentintent=newIntent(Settings.this, Visitor.class);
intent.putExtra("yourpackage.notifyId", notifyID);
PendingIntentpIntent= PendingIntent.getActivity(Settings.this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
// Select the correct notification channel
String selectedChannelId;
if (enableSound){
selectedChannelId = CHANNEL_SOUND_ID;
}else{
selectedChannelId = CHANNEL_SILENT_ID;
}
// Create a notification and set the notification channel.
NotificationCompat.BuildernotificationBuilder=newNotificationCompat.Builder(Settings.this, selectedChannelId);
notificationBuilder.setSmallIcon(R.drawable.notification);
notificationBuilder.setContentTitle("Title");
notificationBuilder.setContentText("Notification Text");
notificationBuilder.setContentIntent(pIntent);
notificationBuilder.setChannelId(selectedChannelId);
Notificationnotification= notificationBuilder.build();
// Issue the notification.
mNotificationManager.notify(notifyID , notification);
}
Post a Comment for "How To Play Sound When A Notification Pops Up?"