gpt4 book ai didi

android - 我们如何在设备时间更改时刷新/.info/serverTimeOffset?

转载 作者:行者123 更新时间:2023-11-29 01:02:12 26 4
gpt4 key购买 nike

我正在使用/.info/serverTimeOffset 从 firebase 获取大概的服务器时间。

Long clockSkew = null;
...
void registerForClockSkew() {
DatabaseReference offsetRef =
FirebaseDatabase.getInstance().getReference(".info/serverTimeOffset");
offsetRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
double offset = snapshot.getValue(Double.class);
clockSkew = (long) offset;
}

@Override
public void onCancelled(DatabaseError error) {
clockSkew = null;
}
});
}

但是正如这里提到的 - https://github.com/firebase/firebase-ios-sdk/issues/363 - 当设备时间发生变化时,偏移量不会刷新。我试图关闭并重新连接 firebase 实例以刷新偏斜值,但它似乎不起作用。在我的代码中,当设备时间发生变化时,我只是简单地输入以下内容 -

FirebaseDatabase.getInstance().goOffline();
FirebaseDatabase.getInstance().goOnline();

但这不会触发值事件监听器回调。我在这里错过了什么?是不是因为goOffline和goOnline是连续的语句,没有任何作用?

最佳答案

处理我发现的情况的唯一方法是保持偏移 w.r.t elapsedRealtime,它在设备时间更改的情况下保持不变。

long clockSkewWRTELapsed
....
@Override
public void onDataChange(DataSnapshot snapshot) {
double offset = snapshot.getValue(Double.class);
clockSkewWRTELapsed = ((long) offset) + System.currentTimeMillis() - SystemClock.elapsedRealTime();
}

只要需要,就可以通过将 elapsedRealTime 添加到 clockSkewWRTElapsed 时间来获取服务器时间。

关于android - 我们如何在设备时间更改时刷新/.info/serverTimeOffset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50278701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com