Android 为什么从Firebase检索数据时会多次触发通知?

Android 为什么从Firebase检索数据时会多次触发通知?,android,firebase,notifications,broadcastreceiver,android-notifications,Android,Firebase,Notifications,Broadcastreceiver,Android Notifications,我有一个按钮,当我按下它时,会从FirebaseDatabase获取一些数据,然后触发通知 以下是方法: aReference.child(rID).addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { if (dataSnapshot.getValue() != null)

我有一个按钮,当我按下它时,会从
FirebaseDatabase
获取一些数据,然后触发
通知

以下是方法:

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);
        }
    }
});
下面是
getNotificationAU()

问题是,即使按一次按钮,通知也会被触发多次,并且状态栏中会显示许多相同的通知

为什么会发生这种情况,以及如何仅触发一个通知


请让我知道。

添加
mNotifyMgr.cancelAll()(其中
mNotifyMgr
NotificationManager
)在
mNotifyMgr.notify(m,notification)之前为我做了这项工作

看起来您在
aReference.child(rID)
下有多个子项,每个
onchildaded
都会显示新的通知called@Wilik是的,有多个孩子。那么,即使在这种情况下,我如何只显示一次通知?这取决于您的通知目的,您可以使用ValueEventListener,为每个通知设置相同的id,或者在启动新通知之前检查通知是否显示。您应该在启动前检查通知是否显示,实际上这取决于您的逻辑。如何检查之前是否显示通知?
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);

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