У меня есть кнопка, когда я нажимаю ее, некоторые данные извлекаются из FirebaseDatabase
, а затем увольняется notification
.Почему уведомления получают несколько раз при извлечении данных из Firebase?
Вот как:
aReference.child(rID).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getValue() != null) {
Map<String, String> newRequest = (Map<String, String>) dataSnapshot.getValue();
uAU = newRequest.get("pName");
final int m = (int) ((new Date().getTime()/1000L) % Integer.MAX_VALUE);
Intent notificationIntent = new Intent(getBaseContext(), NotificationARBroadcastReceiver.class);
notificationIntent.putExtra(NotificationARBroadcastReceiver.NOTIFICATION, getNotificationAU());
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), m, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, pendingIntent);
}
}
});
Вот NotificationARBroadcastReceiver.class
:
public class NotificationARBroadcastReceiver extends BroadcastReceiver {
public static String NOTIFICATION = "notification";
public static NotificationManager mNotifyMgr;
public static int m;
@Override
public void onReceive(Context context, Intent intent) {
m = (new Random()).nextInt(10000);
Log.d("mMain", String.valueOf(m));
mNotifyMgr =
(NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
Notification notification = intent.getParcelableExtra(NOTIFICATION);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
mNotifyMgr.cancel(m);
mNotifyMgr.notify(m, notification);
}
}
Вот getNotificationAU()
:
private Notification getNotificationAU() {
mBuilder = new NotificationCompat.Builder(getBaseContext())
.setSmallIcon(R.mipmap.app_icon_1)
.setContentTitle("title")
.setContentText(***);
Intent resultIntent = new Intent(getBaseContext(), MainActivity.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(
getBaseContext(),
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setAutoCancel(true);
mBuilder.setContentIntent(resultPendingIntent);
return mBuilder.build();
}
Проблема в том, что на еще раз нажать на кнопку, уведомления увольняют много раз и многие другие уведомления отображаются в строке состояния.
Почему это происходит и как увольнять только одно уведомление?
Пожалуйста, дайте мне знать.
похоже, что у вас есть несколько дочерних элементов под 'aReference.child (rID)', появляется новое уведомление, каждое 'onChildAdded' называется – Wilik
@Wilik да есть несколько дочерних. Итак, как я могу показать уведомление только один раз даже при этом обстоятельстве? –
это зависит от цели вашего уведомления, вы можете использовать ValueEventListener вместо этого, устанавливать одинаковый идентификатор для каждого уведомления или проверять, отображается ли уведомление до запуска нового. – Wilik