【问题标题】:android-firebase childEventListener in serviceandroid-firebase childEventListener 在服务中
【发布时间】:2022-05-04 18:35:28
【问题描述】:

在我的 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) {

        }
    });
}

}

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

【问题讨论】:

  • 你确定服务启动了吗?代替通知,也许您最初可以尝试使用日志来查看问题出在哪里:是服务、Firebase 侦听器还是通知?
  • 哦,非常感谢......我的错误......我忘记了启动服务
  • 但现在的问题是,我只有在应用程序处于活动状态时才会收到通知......服务不在后台工作......而且......通知也只针对第一次进入。 ..如果我添加了一项..它会发出通知。假设然后我通过滑动取消通知...并再次添加了一个项目...它没有提供新通知。为什么会这样?
  • 不不......我解决了我的问题......这又是我的错误......但再次感谢......启动服务实际上是我的问题......你拯救了我的一天

标签: android firebase firebase-realtime-database


【解决方案1】:

实际上我们可以在 manifest 文件中启动一个服务。但就我而言,我的错误是我没有在我真正想要启动它的地方添加启动服务语句。所以只需添加

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

在我想开始的课程中。解决了我的问题。

-谢谢@merterpam,指出我的错误

【讨论】:

    【解决方案2】:

    还有一个问题。您没有在清单中给予许可。添加这个:

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    

    【讨论】:

      猜你喜欢
      • 2018-04-16
      • 1970-01-01
      • 2022-01-19
      • 2017-04-03
      • 1970-01-01
      • 2020-06-26
      • 2017-04-22
      • 2020-03-02
      • 2017-02-01
      相关资源
      最近更新 更多