Уведомление о добавлении нового ребенка в базу данных Fire-base с помощью службы - PullRequest
0 голосов
/ 20 января 2019

Но этот код показывает уведомление при каждом запуске приложения и несколько раз в день, даже если дочерний элемент не добавлен в базу данных. Помогите мне решить эту проблему, я пытался использовать onDatabaseChange метод, но происходит то же самое

if (mChildEventListener == null) {
    mChildEventListener = new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            Intent intent = new Intent(getBaseContext(),MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            PendingIntent pendingIntent = PendingIntent.getActivity(getBaseContext(), 0, intent,
                    PendingIntent.FLAG_ONE_SHOT);

            NotificationManager notificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

            NotificationCompat.Builder mnotificationBuilder = new NotificationCompat.Builder(getBaseContext())
                    .setSmallIcon(R.mipmap.ic_chat)
                    .setContentTitle("You may have New Messages !!")
                    .setContentText("Check Chat Room > Received > New Message")
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setContentIntent(pendingIntent)
                    .setAutoCancel(true)
                    .setOnlyAlertOnce(true)
                    .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));



                notificationManager.notify(0, mnotificationBuilder.build());

        }

1 Ответ

0 голосов
/ 20 января 2019

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

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

Простой способ сделать это - отследить тот самый последний дочерний узел, который вы показали пользователю.Например, сохраняя ключ этого узла в общих настройках приложения .Затем, когда вы загружаете приложение, вы читаете ключ из общих настроек и начинаете извлекать узлы оттуда.

Query query = FirebaseDatabase.getInstance().getReference("messages").orderByKey();
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String last_seen_message_key = prefs.getString("last_seen_message_key", null);
if (last_seen_message_key != null) {
  query = query.startAt(last_seen_message_key)
}
query.addChildEventListener(...

Подробнее об этом также см .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...