Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从后台通过连接状态更改firebase数据库?_Java_Android_Firebase Realtime Database - Fatal编程技术网

Java 如何从后台通过连接状态更改firebase数据库?

Java 如何从后台通过连接状态更改firebase数据库?,java,android,firebase-realtime-database,Java,Android,Firebase Realtime Database,我试图用断开连接的方法更改数据库。 我想在后台连接可用时更改数据库。 例如 假设当前我在MainActivity中,状态为Online,在onPause和onDestroy中,状态变为offline。就我而言,仅设置在线/离线状态是不够的。 为了这个我想要 如果我有连接(后台和前台)我的状态 在线 如果我在后台失去连接,我的状态为脱机。当连接可用且应用程序处于终止模式时,我的状态为在线。 对于这个解决方案,stackoverflow建议我使用BroadCastReceiver,但我不知道如何使用

我试图用断开连接的方法更改数据库。 我想在后台连接可用时更改数据库。 例如 假设当前我在MainActivity中,状态为Online,在onPause和onDestroy中,状态变为offline。就我而言,仅设置在线/离线状态是不够的。 为了这个我想要

  • 如果我有连接(后台和前台)我的状态 在线
  • 如果我在后台失去连接,我的状态为脱机。当连接可用且应用程序处于终止模式时,我的状态为在线。 对于这个解决方案,stackoverflow建议我使用BroadCastReceiver,但我不知道如何使用这个类

  • 你可以用这个方法。这对我来说很好

    DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
    connectedRef.addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(@NonNull DataSnapshot snapshot) {
        boolean connected = snapshot.getValue(Boolean.class);
        if (connected) {
          Log.d("FirasChebbah", "connected");
        } else {
          Log.d("FirasChebbah", "not connected");
        }
      }
    
      @Override
      public void onCancelled(@NonNull DatabaseError error) {
        Log.w("FirasChebbah", "Listener was cancelled");
      }
    });
    

    我们可以通过同时使用一个服务和一个广播接收器来轻松实现这一点,以获得您想要的输出。这将始终有效,即当应用程序正在运行、应用程序最小化或应用程序甚至从最小化的应用程序中删除时

    1.舱单代码:

        <application
        ...
    <service android:name=".MyService" />
    </application>
    
    3.ConnectionHelper.java

        import android.content.Context;
     import android.net.ConnectivityManager;
     import android.net.NetworkInfo;
    
     public class ConnectionHelper {
    
     public static long lastNoConnectionTs = -1;
     public static boolean isOnline = true;
    
     public static boolean isConnected(Context context) {
     ConnectivityManager cm =(ConnectivityManager)                      context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    
    return activeNetwork != null && activeNetwork.isConnected();
    }
    
    public static boolean isConnectedOrConnecting(Context context) {
    ConnectivityManager cm =(ConnectivityManager)             context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    
    return activeNetwork != null &&
    activeNetwork.isConnectedOrConnecting();
    }
    
    }
    
    4.您的活动代码

    startService(new Intent(getBaseContext(), MyService.class));
    

    使用此代码,您将能够在应用程序启动时、暂停时甚至在应用程序被销毁时检查连接性

    是的,它是一个列表器。您可以尝试在代码中添加此方法,并尝试检查日志。您可以先在没有互联网连接的情况下进行测试,然后连接到您的wifi或3g并再次检查,您会发现有两条消息:第一条是Firas chebbah未连接,第二条是Firas chebbah已连接。但我有许多活动。我必须添加哪些活动?如果您使用fragment,则只需添加它在你的主活动中,但是如果你正在使用许多活动,那么你需要添加每个活动。如果这个答案有帮助,你可以检查它作为正确的答案吗?但是我不明白,当应用程序进入后台或死机时,这个侦听器将如何运行
    startService(new Intent(getBaseContext(), MyService.class));