【问题标题】:ConnectivityManager to verify internet connectionConnectivityManager 验证互联网连接
【发布时间】:2011-10-27 15:30:56
【问题描述】:

大家好,我需要验证我的设备当前是否连接到互联网,所以我编写了这个使用ConnectivityManager 来检查的类:

public boolean checkInternetConnection() {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
        return true;

    } else {
        return false;
    }
}

效果很好,因为现在该方法位于主包 (com.App) 中的类中,但我应该如何更改代码以使其在 com.App.Utility 中定义的类中工作?

谢谢!

【问题讨论】:

    标签: android package


    【解决方案1】:
    package com.app.utility;
    
      public class Utilities {
    
        public static final boolean CheckInternetConnection(Context context) {
          ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
          if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
            return true;
    
          } else {
            return false;
          }
        }
      }
    

    【讨论】:

      【解决方案2】:

      使用 getActiveNetworkInfo() 的唯一问题是在许多情况下它无法正确检测连接。例如,如果手机上的移动网络被禁用,但 wifi 可用,则活动网络仍可能被视为移动网络,因此返回 false。

      另一种选择是:

      public boolean isOnline() {
          ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
          NetworkInfo netInfoMob = cm.getNetworkInfo(cm.TYPE_MOBILE);
          NetworkInfo netInfoWifi = cm.getNetworkInfo(cm.TYPE_WIFI);
          if ((netInfoMob != null || netInfoWifi != null) && (netInfoMob.isConnectedOrConnecting() || netInfoWifi.isConnectedOrConnecting())) {
              return true;
          }
          return false;
      }
      

      【讨论】:

        【解决方案3】:

        谢谢艾伦 H!

        当 netInfoMob 和 netInfoWifi 之一为空而另一个不为空时,if 条件可能导致 NPE。

        这个对我有用:

        netInfoMobile != null && netInfoMobile.isConnectedOrConnecting() ||
        netInfoWifi != null && netInfoWifi.isConnectedOrConnecting()
        

        【讨论】:

          【解决方案4】:

          试试这个,这段代码有效。

          public static boolean checkNetwork(Context context) {
             context = context;
              ConnectivityManager connManager = (ConnectivityManager) context
                      .getSystemService(Context.CONNECTIVITY_SERVICE);
              if ((connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connManager
                      .getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected())
                      || (connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && connManager
                      .getNetworkInfo(ConnectivityManager.TYPE_WIFI)
                      .isConnected())) {
                  return true;
              } else {
                  return false;
              }
          }
          

          【讨论】:

          • 在任何你想使用 checkNetwork() 的代码部分。你可以试试看 。 if (Constant.getInstance().checkNetwork(getApplicationContext())) { Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_LONG).show(); } else { Toast.makeText(LoginActivity.this, Constant.NETWORK_PROBLEAM, Toast.LENGTH_LONG).show(); }
          【解决方案5】:

          您可以通过kotlin 轻松查看。

           fun checkInternetConnection(context Context) {
               connectivityManager : ConnectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
          
               if(connectivityManager.activeNetwork) {
                   return true
               } else {
                   return false
               }
           } 
          

          【讨论】:

            猜你喜欢
            • 2020-10-10
            • 1970-01-01
            • 2019-01-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-17
            • 2012-01-24
            相关资源
            最近更新 更多