2017-08-04 63 views
-3

我正在使用Firebase。我的应用无法使用的某些功能处于脱机状态(或者将来可能会使用离线模式)。所以如何检测连接丢失,或者在运行活动时wifi/otherNetwork关闭。我遵循这doc,但只有当启动应用程序...不工作的应用程序正在运行。所以你们为我的问题提供任何解决方案?如何检测连接丢失?

回答

0

使用此方法来检查应用程序的互联网连接:

public class NetworkChangeReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 

     Intent networkStateIntent = new Intent(Constants.NETWORK_AVAILABLE_ACTION); 
     networkStateIntent.putExtra(Constants.IS_NETWORK_AVAILABLE, isConnectedToInternet(context)); 
     LocalBroadcastManager.getInstance(context).sendBroadcast(networkStateIntent); 
    } 

    public boolean isConnectedToInternet(Context context) { 

     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     //should check null because in airplane mode it will be null 
     if (netInfo != null && netInfo.isConnected()) { 
      return true; 
     } else { 
      return false; 
     } 

    } 

注册reciever清单文件是这样的:

<receiver android:name=".utils.NetwrokConnection.NetworkChangeReceiver"> 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
       <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
      </intent-filter> 
     </receiver> 

使用这种方法在活动中要检查连接:

public void networkConnection() { 
     IntentFilter intentFilter = new IntentFilter(Constants.NETWORK_AVAILABLE_ACTION); 
     LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       boolean isNetworkAvailable = intent.getBooleanExtra(Constants.IS_NETWORK_AVAILABLE, false); 
       Dialogs.getInstance().showSnackbar(activity,(View) rootlayout, isNetworkAvailable); 
      } 
     }, intentFilter); 

}

同时在menifest文件中添加权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />