how to turn off notification programmatically in android when app running?

13,650

Solution 1

First part is

"message it makes a notification sound."

First check if application is in foreground or not if it is then, To stop sound use set defaults to 0 and sound to null. change the method params like this .setSound(isInForeGround ? null : uri).

How can i stop the notification when the user is using the app programmatically?

I guess this what you should follow;

As per user experience is concerned you should not stop notifications, you just have to consume them in a way user should not able to see them pilled up when app is open in notificationBar.

As Chatting application is concerned you should've used something as channel to send receive messages if two users are online and chatting so when you receive message.

So just don't create pending intent from the data you receive for particular chat in noticiationBar.

Hope this clears your concept consuming notification. Hope this helps.

Solution 2

 //if you use fcm then try       

   @Override
    public void onMessageReceived(final RemoteMessage remoteMessage) {
        if (remoteMessage.getNotification() != null) {
            String message = remoteMessage.getNotification().getBody();
            if (isForeground(getApplicationContext())) {
              //if in forground then your operation
            // if app is running them
            } else {
             //if in background then perform notification operation
                sendNotification(message);
            }
        }
    }


        private static boolean isForeground(Context context) {
                    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
                    List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses();
                    final String packageName = context.getPackageName();
                    for (ActivityManager.RunningAppProcessInfo appProcess : tasks) {
                        if (ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND == appProcess.importance && packageName.equals(appProcess.processName)) {
                            return true;
                        }
                    }
                    return false;
                }

Solution 3

Just remove

.setSound(defaultSoundUri1) 

from

 Notification myNotification = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
                    //  .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ii_launcher))
                    .setSound(defaultSoundUri1)
                    .setAutoCancel(true)
                    .setColor(getResources().getColor(R.color.notificationColor))
                    .setContentIntent(resultPendingIntent)
                    .setContentTitle("message")
                    .setContentText(message)
                    .setStyle(notiStyle).build();

when you do not need any sound. If this will not help you, try to to do this:

Notification myNotification = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
                    //  .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ii_launcher))
                    .setSound(null)
                    .setAutoCancel(true)
                    .setColor(getResources().getColor(R.color.notificationColor))
                    .setContentIntent(resultPendingIntent)
                    .setContentTitle("message")
                    .setContentText(message)
                    .setStyle(notiStyle).build();
myNotification.defaults = 0;
Share:
13,650
DEEPAK MITTAL
Author by

DEEPAK MITTAL

Updated on June 04, 2022

Comments

  • DEEPAK MITTAL
    DEEPAK MITTAL almost 2 years

    I am trying to develop an android app in which i am implementing chat functionality. but when i receive the message it makes a notification sound. How can i stop the notification when the user is using the app programmatically?

     private void ChatNotifications(String uid, String fuid, String message) {
                NotificationCompat.BigTextStyle notiStyle = new NotificationCompat.BigTextStyle();
                notiStyle.setBigContentTitle("message");
                // notiStyle.setSummaryText(quote);
                notiStyle.bigText(message);
                Intent resultIntent = new Intent(this, Loading.class);
    
                resultIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
                stackBuilder.addParentStack(Loading.class);
                stackBuilder.addNextIntent(resultIntent);
                PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
                //Uri defaultSoundUri1 = Uri.parse("android.resource://com.therevew.quotes/" + R.raw.hello);
                Uri defaultSoundUri1= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                Notification myNotification = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
                        //  .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ii_launcher))
                        .setSound(defaultSoundUri1)
                        .setAutoCancel(true)
                        .setColor(getResources().getColor(R.color.notificationColor))
                        .setContentIntent(resultPendingIntent)
                        .setContentTitle("message")
                        .setContentText(message)
                        .setStyle(notiStyle).build();
                NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.notify(101/* ID of notification */, notiStyle.build());
            }
    
  • DEEPAK MITTAL
    DEEPAK MITTAL over 7 years
    if i am removing this .setSound(defaultSoundUri1) . notification stop work permanently.
  • DEEPAK MITTAL
    DEEPAK MITTAL over 7 years
    how i am change default values?
  • MobileEvangelist
    MobileEvangelist over 7 years
    @deepak-mittal Just check if your application is in foreground then use Conditional operator in this method .setSound( isinForeground ? null : uri). This will solve your problem. For application in foreground I urge you to do some internet research to get the best approach... hope this helps
  • MobileEvangelist
    MobileEvangelist over 7 years
    @DEEPAKMITTAL please accept the answer if it solves your problem.
  • ben_joseph
    ben_joseph over 5 years
    Will this not affect all apps and not just the calling app?