服务中的android-firebase childEventListener

时间:2017-10-07 08:56:33

标签: android firebase firebase-realtime-database

在我的android应用程序中,我正在尝试实现firebase数据库的childEventListener,即使应用程序未处于活动状态。 意味着每当firebase db特定子项有新条目时它应该通知用户.. 所以到目前为止我已经完成了这个,

我已将清单文件中的服务声明为

<service android:name=".ChildEventListener"/>

然后我的ChildEventListener类如下

public class ChildEventListener extends Service {

FirebaseAuth auth;
NotificationCompat.Builder builder;

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent,  int flags, int startId) {
    retrivemsg();
    return START_STICKY;
}

public void retrivemsg()
{
    DatabaseReference mdb= FirebaseDatabase.getInstance().getReference("messages/"+auth.getCurrentUser().getUid());
    builder=new NotificationCompat.Builder(this,"onchildadded");
    mdb.addChildEventListener(new com.google.firebase.database.ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            String msg=dataSnapshot.child("msg").getKey();
            builder.setSmallIcon(R.drawable.send);
            builder.setContentTitle("child added");
            builder.setContentText(msg);
            NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            notificationManager.notify(1,builder.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) {

        }
    });
}

}

但是我试过了,但没有运气......即使是新的孩子也加了,我没有得到任何通知......即使应用程序在前台也没有...

1 个答案:

答案 0 :(得分:0)

实际上我们可以在manifest fie中启动服务。但在我的情况下,我的错误是我没有添加启动服务声明,我真的想要启动它。所以只需添加

startService(new Intent(this, ChildEventListener.class));

我想上课的课程。解决了我的问题。

-Thanx @ merterpam,指出我的错误