使用Firebase服务的Android Notification

时间:2017-04-12 08:53:37

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

    public class MyService extends Service {

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference().child("notify");


        // NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        public MyService() {
        }

        @Override
        public IBinder onBind(Intent intent) {
            // TODO: Return the communication channel to the service.
            return null;
        }

        @Override
        public void onCreate() {
            super.onCreate();
            myRef.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                    String value = dataSnapshot.getValue().toString();

                    NotificationCompat.Builder mBuilder =
                    (NotificationCompat.Builder) new NotificationCompat.Builder(getApplicationContext())
                            .setSmallIcon(R.mipmap.ic_launcher)
                            .setContentTitle("Society")
                            .setContentInfo(value)
                            .setVibrate(new long[]{500, 500}).setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                            .setContentText(value);

                    NotificationManager mNotifyMgr =
                    (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                    mNotifyMgr.notify(001, mBuilder.build());

               }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

        }

        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {

            Toast.makeText(getApplicationContext(), "Service started", Toast.LENGTH_LONG).show();

            return START_STICKY;
        }
    }

我想创建一个服务,在将新子项添加到firebase中的“notify”标记时显示通知。 问题是当服务第一次启动时,“notify”标记下的所有子进程都会通过通知构建器得到通知。 此外,在特定的一组句点之后,即使在通知标记下没有创建新的子节点,此过程也会重复。 我想仅显示添加到“notify”标记的最新子项的通知。

1 个答案:

答案 0 :(得分:0)

当您向Firebase参考添加ChildEventListener时,onChildAdded被称为一次给予给定资源的每个孩子。否则,您将如何填充ListViewRecyclerView? ; - )

我建议您在JSON结构中添加createdAtupdatedAt字段(使用ISO 8601格式)。然后,您可以在添加事件侦听器后创建query个元素。

然而it is a bad idea keep a listener running on a background service,因为你会长时间打开一个插座,耗尽设备电池。