【问题标题】:Detect whether internet connection is available and working on Android API 15+检测互联网连接是否可用并在 Android API 15+ 上工作
【发布时间】:2016-04-20 09:33:16
【问题描述】:

我需要检测互联网连接是否可用并且在 android 中工作正常。在我开始任何 WebView 活动之前,我需要调用此条件检查。

到目前为止,我已经设法实现了这个答案中的 isAvailable() 功能: Class which check for connectivity

但是,如果 wifi 开启但未连接以太网插头,上述方法会失败。 有人说使用 ping 是个好主意。但我无法成功实现此功能。

  1. 如何在link 中给出的代码中实现 ping 功能
  2. 我的 android 应用程序使用 Retrofit API 来发送和接收 PHP 内容。 Retrofit 能否帮助检查互联网连接?
  3. 您能否建议任何其他简单且易于实施的方法来检查实时互联网连接?

我使用的代码来自this link :-

  1. 类名:AppStatus

      import android.content.Context;
      import android.net.ConnectivityManager;
      import android.net.NetworkInfo;
      import android.util.Log;
      public class AppStatus {
    
      private static AppStatus instance = new AppStatus();
      static Context context;
      ConnectivityManager connectivityManager;
      NetworkInfo wifiInfo, mobileInfo;
      boolean connected = false;
    
      public static AppStatus getInstance(Context ctx) {
              context = ctx.getApplicationContext();
              return instance;
          }
    
          public boolean isOnline() {
    try {
        connectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
    
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    connected = networkInfo != null && networkInfo.isAvailable() &&
            networkInfo.isConnected();
    return connected;
    
    
    } catch (Exception e) {
        System.out.println("CheckConnectivity Exception: " + e.getMessage());
        Log.v("connectivity", e.toString());
    }
    return connected;
    

    }

  2. 此代码有助于检查互联网连接,但在前面提到的情况下失败:-

    if (AppStatus.getInstance(this).isOnline()) {
        Toast.makeText(this,"You are online!!!!",8000).show();
    } else {
        Toast.makeText(this,"Internet Connection is required !",8000).show();
        Log.v("Home", "############################You are not online!!!!");
        finish();
    }
    

【问题讨论】:

标签: android android-internet


【解决方案1】:
public static boolean isNetworkAvailable(Context mContext) {

    ConnectivityManager cm = (ConnectivityManager) mContext
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
        Log.e("Network Testing", "***Available***");
        return true;
    }
    Log.e("Network Testing", "***Not Available***");
    return false;
}

【讨论】:

    【解决方案2】:

    感谢@camelCaseCoder 的评论。 我得到了一个成功实现的代码,我想与大家分享它,因此我正在回答我自己的问题。

    1. AppStatus 变为(注释掉前面的代码后) :-

              public class AppStatus {
      
              private static AppStatus instance = new AppStatus();
              static Context context;
              //ConnectivityManager connectivityManager;
              //NetworkInfo wifiInfo, mobileInfo;
              //boolean connected = false;
      
              public static AppStatus getInstance(Context ctx) {
                  context = ctx.getApplicationContext();
                  return instance;
              }
      
              public boolean isOnline() {
                  /*try {
          connectivityManager = (ConnectivityManager) context
                  .getSystemService(Context.CONNECTIVITY_SERVICE);
      
          NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
          connected = networkInfo != null && networkInfo.isAvailable() &&
                  networkInfo.isConnected();
          return connected;
      
      
      } catch (Exception e) {
          System.out.println("CheckConnectivity Exception: " + e.getMessage());
          Log.v("connectivity", e.toString());
      }
      return connected;
      */
      Runtime runtime = Runtime.getRuntime();
      try {
      
          Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
          int     exitValue = ipProcess.waitFor();
          return (exitValue == 0);
      
      } catch (IOException e)          { e.printStackTrace(); }
      catch (InterruptedException e) { e.printStackTrace(); }
      
      return false;
      

      }

    }

    1. 实现方式和之前类似:-

      //check for internet connectivity by calling isOnline-using Ping @google
      if (AppStatus.getInstance(this).isOnline()) {
          Toast.makeText(this, "You are online!!!!", 8000).show();
      } else {
          Toast.makeText(this,"Internet Connection is required !",8000).show();
          Log.v("Home", "############################You are not online!!!!");
          finish();
      }
      

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 2023-03-30
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      相关资源
      最近更新 更多