how to turn off notification programmatically in android when app running?
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;
DEEPAK MITTAL
Updated on June 04, 2022Comments
-
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 over 7 yearsif i am removing this .setSound(defaultSoundUri1) . notification stop work permanently.
-
DEEPAK MITTAL over 7 yearshow i am change default values?
-
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 over 7 years@DEEPAKMITTAL please accept the answer if it solves your problem.
-
ben_joseph over 5 yearsWill this not affect all apps and not just the calling app?