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(); 
} 

問題は一度もボタンを押すことで、通知が発射されていることである。ここ

の方法です複数回多くの同じ通知がステータスバーに表示されます。

なぜがこのような現象で、1つの通知のみを発信するのですか?

お知らせください。

+0

あなたは 'aReference.child(rID)'の下に複数の子を持つように見えますが、 'onChildAdded'が呼び出されるたびに新しい通知が表示されます。 – Wilik

+0

@Wilikはい複数の子があります。では、このような状況でも通知を1回だけ表示するにはどうすればよいですか? –

+0

通知の目的によっては、代わりにValueEventListenerを使用したり、通知ごとに同じIDを設定したり、新しい通知を開始する前に通知が表示されているかどうかを確認したりすることができます。 – Wilik

答えて

0

の前にmNotifyMgr.cancelAll();mNotifyMgrNotificationManager)を追加してください!

関連する問題