【问题标题】:Check internet status from the main activity从主要活动检查互联网状态
【发布时间】:2015-03-25 23:20:30
【问题描述】:

我是android开发的新学生,所以我没有足够的编码经验,所以我需要你的帮助...... 我在 android studio 上创建了一个 java 类来检查是否有互联网连接:

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;


public class InternetStatus {
private static final String LOG_TAG ="InternetStatus";
public static boolean hasActiveInternetConnection(Context context) {
    if (isNetworkAvailable((Activity) context)) {
        try {
            HttpURLConnection urlc = (HttpURLConnection) (new     URL("http://www.google.com").openConnection());
            urlc.setRequestProperty("User-Agent", "Test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500);
            urlc.connect();
            return (urlc.getResponseCode() == 200);
        } catch (IOException e) {
            Log.e(LOG_TAG, "Error checking internet connection", e);
        }
    } else {
        Log.d(LOG_TAG, "No network available!");
    }
    return false;
}
public static boolean isNetworkAvailable(Activity mActivity) {
    Context context = mActivity.getApplicationContext();
    ConnectivityManager connectivity = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity == null) {
        return false;
    } else {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null) {
            for (int i = 0; i < info.length; i++) {
                if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                }
            }
        }
    }
    return false;
}


}

所以,我有两个问题:

1- 这是正确的代码还是我遗漏了什么?

2- 如您所见,这是一个 java 类,如果我在我的主要活动上创建一个按钮来检查是否有互联网连接!我怎么能通过导入这个类或类似的东西来做到这一点?!!

【问题讨论】:

    标签: java android connectivity


    【解决方案1】:
    // Check if there is any connectivity for a Wifi network
    public boolean isConnectedWifi(){
        NetworkInfo info = Connectivity.getNetworkInfo(Context);
        return info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI;
    }
    
    // Check if there is any connectivity for a mobile network
    public boolean isConnectedMobile(){
        NetworkInfo info = Connectivity.getNetworkInfo(Context);
        return info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_MOBILE;
    }
    
    // Check all connectivities whether available or not
    public boolean isNetworkAvailable() {
        ConnectivityManager cm = (ConnectivityManager) 
          getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        return networkInfo != null && networkInfo.isConnected();
    }
    

    如何使用?

    例如,我们需要检查连接是否可用:

    if(isNetworkAvailable()){
        // do your thing here.
    }
    

    当网络可用时,我们需要检查是WiFi还是移动网络:

    if(isConnectedWifi()){
        // do your thing here with WiFi Network.
    }
    
    if(isConnectedMobile()){
        // do your thing here with Mobile Network.
    }
    

    【讨论】:

    • 谢谢兄弟 :) 这是最好的答案 (Y),它可以 100% 工作,但这里缺少“连接”类,你必须构建它,我用谷歌搜索它并在这里查看课程:(stackoverflow.com/questions/2802472/…)
    • 我想为你的答案投票,但我没有足够的声誉:(
    • 感谢您提供有关失踪的信息。接受我的 +1。
    【解决方案2】:

    首先,你必须在AndroidManifest.xml

    中包含一个权限请求
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

    然后,创建一个方法来检查互联网连接是否处于活动状态:

    public static boolean isInternetConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    }
    

    【讨论】:

    • 我缺少权限请求。谢谢!
    【解决方案3】:

    在你的MainActivity 班级中

    @Override
    protected void onCreate (Bundle savedInstanceState) {
    
    super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_camera);
         boolean isavailable = InternetStatus.hasActiveInternetConnection(getApplicationContext);
        }
    }
    

    如果你有按钮

    boolean isavailable ;
    @Override
    protected void onCreate (Bundle savedInstanceState) {
    
    super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_camera);
         Button someButton = (Button) findViewById(R.id.yourButton);
         someButton.setOnClickListener(new onClickLIstener(){
                   isavailable = InternetStatus.hasActiveInternetConnection(getApplicationContext);
         });
        }
    }
    

    【讨论】:

      【解决方案4】:

      要检查连接状态,无需连接到互联网并获取状态代码。使用下面的代码。

      public boolean isConnected() {
          ConnectivityManager manager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
          NetworkInfo info = manager.getActiveNetworkInfo();
          if (info != null && info.isConnected()) {
              return true;
          } else {
              return false;
      
          }
      }
      

      根据活动网络状态返回真或假。

      在您的按钮单击时只需调用此函数,如果它返回 true,则存在连接。如果返回 false,则表示没有活动的 Internet 连接。

      【讨论】:

        【解决方案5】:

        只需将 info.isConnected() 放入您的 isNetworkAvailable 函数中:

          public static boolean isNetworkAvailable(Activity mActivity) {
                    ...
                if (connectivity == null) {
                    return false;
                } else {
                    NetworkInfo[] info = connectivity.getAllNetworkInfo();
                        if (info != null && info.isConnected()) {
                            ...
                            }
                        }
                    }
                    return false;
                }
        

        【讨论】:

          【解决方案6】:

          大部分答案都已过时

              fun isNetworkAvailable(context : Context): Boolean {
                  val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
                  if (isAndroidVersionAboveLollipop()) {
                      val activeNetwork = connectivityManager.activeNetwork ?: return false
                      val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false
                      networkCapabilities.let {
                          return it.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && it.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
                      }
                  } else {
                        return connectivityManager.activeNetworkInfo?.isConnectedOrConnecting ?: false
                   }
              }
          
              fun isAndroidVersionAboveLollipop() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-07-17
            • 1970-01-01
            • 2012-09-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多