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つの通知のみを発信するのですか?
お知らせください。
あなたは 'aReference.child(rID)'の下に複数の子を持つように見えますが、 'onChildAdded'が呼び出されるたびに新しい通知が表示されます。 – Wilik
@Wilikはい複数の子があります。では、このような状況でも通知を1回だけ表示するにはどうすればよいですか? –
通知の目的によっては、代わりにValueEventListenerを使用したり、通知ごとに同じIDを設定したり、新しい通知を開始する前に通知が表示されているかどうかを確認したりすることができます。 – Wilik