How to play sound when a notification pops up?

前端 未结 1 502
闹比i
闹比i 2021-01-27 05:55

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 an

相关标签:
1条回答
  • 2021-01-27 06:32

    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 default
    boolean enableSound = false;
    

    2- Control the flag with the second switch

    simpleswitch2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            enableSound = isChecked;
        }
    });
    

    3- Use the NotificationBuilder to control the sound. Replace this piece of code from first switch

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.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(new long[]{1000,100});
    }
    
    Notification notification = 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){
        int notifyID = 1;
        String CHANNEL_SOUND_ID = "channel SOUND";// The id of the channel.
        CharSequence NAME_SOUND = "channel 1";// The user-visible name of the channel.
        String CHANNEL_SILENT_ID = "channel SILENT";// The id of the channel.
        CharSequence NAME_SILENT = "channel 2";// The user-visible name of the channel.
        int importance_sound = NotificationManager.IMPORTANCE_HIGH;
        int importance_silent = NotificationManager.IMPORTANCE_LOW;
        NotificationChannel mChannel_sound = new NotificationChannel(CHANNEL_SOUND_ID, NAME_SOUND, importance_sound);
        NotificationChannel mChannel_silent = new NotificationChannel(CHANNEL_SILENT_ID, NAME_SILENT, importance_silent);
    
        // Crete both notification channels
        NotificationManager mNotificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.createNotificationChannel(mChannel_sound);
        mNotificationManager.createNotificationChannel(mChannel_silent);
    
        Intent intent = new Intent(Settings.this, Visitor.class);
        intent.putExtra("yourpackage.notifyId", notifyID);
        PendingIntent pIntent = 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.Builder notificationBuilder = new NotificationCompat.Builder(Settings.this, selectedChannelId);
        notificationBuilder.setSmallIcon(R.drawable.notification);
        notificationBuilder.setContentTitle("Title");
        notificationBuilder.setContentText("Notification Text");
        notificationBuilder.setContentIntent(pIntent);
        notificationBuilder.setChannelId(selectedChannelId);
    
        Notification notification = notificationBuilder.build();
    
    
            // Issue the notification.
        mNotificationManager.notify(notifyID , notification);
    }
    
    0 讨论(0)
提交回复
热议问题