通过使用服务将新孩子的通知添加到Fire-base数据库

时间:2019-01-20 04:34:09

标签: android firebase-realtime-database android-service

但是,即使没有将任何子级添加到数据库中,该代码也会在每天每个应用程序启动和多次显示通知 请帮助我解决此问题,我已尝试使用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 :(得分:0)

ChildEventListener附加到某个位置时,该位置上所有现有子节点的onChildAdded都会立即被调用。因此,听起来代码正在按预期工作。

这听起来还像您是在尝试仅通知用户个子节点,这可能意味着它们尚未见过子节点。

执行此操作的一种简单方法是跟踪您显示给用户的最新子节点。例如,通过将该节点的密钥存储在shared preferences of the app中。然后,在加载应用程序时,您将从共享的首选项中读取密钥,然后从那里开始检索节点。

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(...

有关此的更多信息,请参见: