实际上,我想向用户显示在线/离线状态。我阅读了https://firebase.google.com/docs/firestore/solutions/presence并实现了onDiscount()
以isOnline = false
折扣价更新Realtime Database,但问题是Firestore
当用户以折扣价时该数据不会在内部更新。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Map<String, Object> user = new HashMap<>();
myRef.child(IS_ONLINE).setValue(true);
myRef.child(IS_ONLINE).onDisconnect().setValue(false);
myRef.child("isOnline").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
status = snapshot.getValue(Boolean.class);
user.put("isOnline", status);
doctRef.set(user);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
我创建了一个服务来调用此方法,您可以尝试这样。将应用程序从后台真正删除后,将触发此服务。
public class ClosingService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
// Handle application closing
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child(getString(R.string.USER));
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if (firebaseUser != null) { databaseReference.child(firebaseUser.getUid()).child(getString(R.string.sedang_online)).setValue(false);
databaseReference.child(firebaseUser.getUid()).child(getString(R.string.lastSeen)).setValue(System.currentTimeMillis());
}
// Destroy the service
stopSelf();
}
}
之后,启动应用程序时将调用此服务。例如,在启动画面活动中。
//Start closing service
final Intent stickyService = new Intent(this, ClosingService.class);
startService(stickyService);
并且不要忘记在androidmanifest创建服务。
<service
android:name=".u.ClosingService"
android:stopWithTask="false" />
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句