Skip to content Skip to sidebar Skip to footer

How To Play Sound When A Notification Pops Up?

I'm working on an app where using two switch buttons the user can turn on/off notifications and notification sound. I created the notifications that pop up on the status bar and I

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?"