0

У меня есть кнопка, когда я нажимаю ее, некоторые данные извлекаются из 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(); 
} 

Проблема в том, что на еще раз нажать на кнопку, уведомления увольняют много раз и многие другие уведомления отображаются в строке состояния.

Почему это происходит и как увольнять только одно уведомление?

Пожалуйста, дайте мне знать.

+0

похоже, что у вас есть несколько дочерних элементов под 'aReference.child (rID)', появляется новое уведомление, каждое 'onChildAdded' называется – Wilik

+0

@Wilik да есть несколько дочерних. Итак, как я могу показать уведомление только один раз даже при этом обстоятельстве? –

+0

это зависит от цели вашего уведомления, вы можете использовать ValueEventListener вместо этого, устанавливать одинаковый идентификатор для каждого уведомления или проверять, отображается ли уведомление до запуска нового. – Wilik

ответ

0

Добавление mNotifyMgr.cancelAll(); (где mNotifyMgr - NotificationManager) до mNotifyMgr.notify(m, notification); выполнил эту работу для меня!