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