您可以使用后台服务,我实际上做了类似您需要的Firebase功能,我们需要通知某些用户其他用户按下了紧急按钮。所以下面是我所做的一些示例代码,您需要一个粘性服务和一个Firebase侦听器,我不知道当前版本是否与我一样工作,但这里是您可以使用的,或者至少我可以给你了解如何去做你需要的东西。
public class DummyService extends Service implements ValueEventListener, ChildEventListener {
private Query mRef;
public static final String FIREBASE_URL = "https://your-firebase-url.firebaseio.com/";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
// some stuff else you need to do
Firebase.setAndroidContext(this);
// this will be your main ref, it'll hear everything on your firebase db
Firebase mFirebaseRoot = new Firebase(DummyService.FIREBASE_URL);
mRef = mFirebaseRoot;
// if you want to hear an specific query you could use something like I used
// you can read the docs at firebase web
//mRef = mFirebaseRoot.child("your_child);
mRef.addListenerForSingleValueEvent(this);
mRef.addChildEventListener(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
// read the docs of how this listeners work
if (something) {
notifyUser();
}
}
@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 onDataChange(DataSnapshot dataSnapshot) {}
@Override
public void onCancelled(FirebaseError firebaseError) {}
}
而且你可以使用一个BroadcastReceiver时赶上设备启动和火你的服务,所以这样一来,用户不需要打开应用程序,它会永远运行。
希望这会有用,遗憾的代码示例indents,我不为什么看起来像这样哈哈。
即使其关闭。 –
你应该保留数据库监听器,意思是不要在'OnStop()' –
中删除它们,尝试实现一个后台服务,它充当db监听器 –