The app receives notifications via FirebaseCloudMessaging. Notifications arrive normally.
I want to set a counter and send the total number of new notifications to the icon inside the app. There is a lot of information about icons on the Internet, I can install them. But how do I transfer the number of all new notifications to the icon? I wanted to install a Listener, but I didn't find any suitable information on the Internet, mostly write about the listeners of all applications. And you only need to listen to my notification channel. How can this be done?
This is how I get notifications.
OreoAndAboveNotification.java
package com.sg.test1.notifications;
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.ContextWrapper;
import android.net.Uri;
import android.os.Build;
public class OreoAndAboveNotification extends ContextWrapper {
private static final String ID = "some_id";
private static final String NAME = "test1";
private NotificationManager notificationManager;
public OreoAndAboveNotification(Context base) {
super(base);
if (Build.VERSION.SDK_INT>Build.VERSION_CODES.O){
createChanel();
}
}
@TargetApi(Build.VERSION_CODES.O)
private void createChanel() {
NotificationChannel notificationChannel = new NotificationChannel(ID, NAME, NotificationManager.IMPORTANCE_DEFAULT);
notificationChannel.enableLights(true);
notificationChannel.enableVibration(true);
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
getManager().createNotificationChannel(notificationChannel);
}
public NotificationManager getManager(){
if (notificationManager == null){
notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
}
return notificationManager;
}
@TargetApi(Build.VERSION_CODES.O)
public Notification.Builder getONotifications(String title,
String body,
PendingIntent pendingIntent,
Uri soundUri,
String icon){
return new Notification.Builder(getApplicationContext(), ID)
.setContentIntent(pendingIntent)
.setContentTitle(title)
.setContentText(body)
.setSound(soundUri)
.setAutoCancel(true)
.setSmallIcon(Integer.parseInt(icon));
}
}
FirebaseMessaging.java
package com.sg.test1.notifications;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.sg.test1.PrChatActivity;
public class FirebaseMessaging extends FirebaseMessagingService {
@Override
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
SharedPreferences sharedPreferences = getSharedPreferences("SP_USER", MODE_PRIVATE);
String savedCurrentUser = sharedPreferences.getString("Current_USERID", "None");
String sent = remoteMessage.getData().get("sent");
String user = remoteMessage.getData().get("user");
FirebaseUser fUser = FirebaseAuth.getInstance().getCurrentUser();
if (fUser != null && sent.equals(fUser.getUid())) {
if (!savedCurrentUser.equals(user)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
sendAndNotification(remoteMessage);
}
else {
sendNormNotification(remoteMessage);
}
}
}
}
private void sendNormNotification(RemoteMessage remoteMessage) {
String user = ""+remoteMessage.getData().get("user");
String icon = remoteMessage.getData().get("icon");
String title = remoteMessage.getData().get("title");
String body = remoteMessage.getData().get("body");
RemoteMessage.Notification notification = remoteMessage.getNotification();
int i = Integer.parseInt(user.replaceAll("[\\D]", ""));
Intent intent = new Intent(this, PrChatActivity.class);
Bundle bundle = new Bundle();
bundle.putString("hisUid", user);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, i, intent, PendingIntent.FLAG_ONE_SHOT);
Uri defSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(Integer.parseInt(icon))
.setContentText(body)
.setContentTitle(title)
.setAutoCancel(true)
.setSound(defSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int j = 0;
if (i > 0) {
j = i;
}
notificationManager.notify(j, builder.build());
}
private void sendAndNotification(RemoteMessage remoteMessage) {
String user = remoteMessage.getData().get("user");
String icon = remoteMessage.getData().get("icon");
String title = remoteMessage.getData().get("title");
String body = remoteMessage.getData().get("body");
RemoteMessage.Notification notification = remoteMessage.getNotification();
int i = Integer.parseInt(user.replaceAll("[\\D]", ""));
Intent intent = new Intent(this, PrChatActivity.class);
Bundle bundle = new Bundle();
bundle.putString("hisUid", user);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, i, intent, PendingIntent.FLAG_ONE_SHOT);
Uri defSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
OreoAndAboveNotification notification1 = new OreoAndAboveNotification(this);
Notification.Builder builder = notification1.getONotifications(title, body, pendingIntent, defSoundUri, icon);
int j = 0;
if (i>0) {
j = i;
}
notification1.getManager().notify(j,builder.build());
}
@Override
public void onNewToken(@NonNull String s) {
super.onNewToken(s);
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user !=null){
updateToken(s);
}
}
private void updateToken(String tokenRefresh){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Tokens");
Token token = new Token(tokenRefresh);
ref.child(user.getUid()).setValue(token);
}
}