Android 跟踪用户';s与Firebase的联机/脱机状态

Android 跟踪用户';s与Firebase的联机/脱机状态,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我一直在想一个办法,但到目前为止还找不到办法。我希望我的用户能够像在许多社交网络中一样,在线/离线地看到彼此。例如,为每个用户指定一个布尔值。True表示在线,false表示离线。但是我什么时候把布尔值设为false呢?用户关闭应用程序的那一刻似乎是一个好时机,但根据我的研究,无法确定应用程序是否被终止 那么,你们将如何使用Firebase或自己的服务器或其他工具跟踪用户的在线状态呢。我很好奇 我所说的在线和离线,是指用户当时是否正在使用该应用程序 您可以为internet连接设置侦听器。例如,

我一直在想一个办法,但到目前为止还找不到办法。我希望我的用户能够像在许多社交网络中一样,在线/离线地看到彼此。例如,为每个用户指定一个布尔值。True表示在线,false表示离线。但是我什么时候把布尔值设为false呢?用户关闭应用程序的那一刻似乎是一个好时机,但根据我的研究,无法确定应用程序是否被终止

那么,你们将如何使用Firebase或自己的服务器或其他工具跟踪用户的在线状态呢。我很好奇


我所说的在线和离线,是指用户当时是否正在使用该应用程序

您可以为internet连接设置侦听器。例如,检查互联网是否已连接。如果未连接,则将布尔值设置为false;如果已连接internet,则布尔值设置为true。请看一下代码:

ConnectivityManager cm =(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();

    if(isConnected)   
    {
        // set your boolean to true
    }
    if(!isConnected) 
    {
        // set your boolean to false here
    }

Firebase通过特殊的
.info/connected
路径提供了一种方便的方法

var amOnline = new Firebase('https://<demo>.firebaseio.com/.info/connected');
var userRef = new Firebase('https://<demo>.firebaseio.com/presence/' + userid);
amOnline.on('value', function(snapshot) {
  if (snapshot.val()) {
    // User is online.
    userRef.set(true);
  } else {
    // User is offline.
    // WARNING: This won't work! See an explanation below.
    userRef.set(false);
  }
});
var amOnline=new Firebase('https://.firebaseio.com/.info/connected');
var userRef=new Firebase('https://.firebaseio.com/presence/'+用户ID);
amOnline.on('value',函数(快照){
if(snapshot.val()){
//用户是在线的。
userRef.set(true);
}否则{
//用户处于脱机状态。
//警告:这不起作用!请参阅下面的说明。
userRef.set(false);
}
});

下面是关于跟踪用户状态的一个很好的解释

您可以选择该服务。@Jack您确定该代码符合问题吗?@Javacoder该代码不是问题的100%解决方案,但它可以完成大部分工作,就像用户已打开internet,然后将布尔值设置为false一样。完整的答案将包括服务,比如他需要在服务中设置一种侦听器来检查应用程序是否仍在android进程中运行。如果应用程序关闭,就像我们通常通过刷起最近的应用程序一样,然后再次在那里设置布尔值false。所以,我在活动部分帮助了他。看到了吗