Значек с общим количеством уведомлений
Приложение получает уведомления через FirebaseCloudMessaging
Хочу установить значек внутри приложения и на нем цифры с общим количеством новых уведомлений. Значек установить нет проблем. но как передавать на него количество всех новых уведомлений?? хотел установить слушатель но в интернете не нашел подходящей информации, в основном пишут про слушатель всех приложений. а нужно только прослушивать мой канал уведомлений
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);
}
}