检查网络连接的android(Check network connection android)

2019-06-23 08:39发布

在我的应用程序,这是我在模拟器上测试,我使用下面的代码来检查网络连接(WIFI):

    public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}

该方法返回总是true ,即使我禁用我的电脑的无线连接...这是造成仿真器或者是其他什么东西?

如果不检查网络连接正确的方式,我该怎么办呢?

Answer 1:

这是更好地(1)通过在上下文,使得每一次活动都可以调用这个函数,和(2)使该功能静:

 public boolean isNetworkOnline() {
    boolean status=false;
    try{
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getNetworkInfo(0);
        if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) {
            status= true;
        }else {
            netInfo = cm.getNetworkInfo(1);
            if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED)
                status= true;
        }
    }catch(Exception e){
        e.printStackTrace();  
        return false;
    }
    return status;

    }  


Answer 2:

为了得到getActiveNetworkInfo()工作,你需要以下添加到清单。

1. uses-permission android:name="android.permission.INTERNET"
 2. uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE"

最好使用netInfo.isConnected(),而不是netInfo.isConnectedOrConnecting

也试试这个

Context.getSystemService(Context.CONNECTIVITY_SERVICE).getNetworkInfo(ConnectivityManager.TYPE_MOBILE)

要么

Context.getSystemService(Context.CONNECTIVITY_SERVICE).requestRouteToHost(TYPE_WIFI, int hostAddress)


Answer 3:

我们可以检查使用以下功能连接状态的互联网连接。 谷歌Android已经更新了Android的API函数来检查网络状态。 现在最新的Android API的, getAllNetworkInfo()已过时。 但getAllNetworks()函数仅允许用于Build.VERSION.SDK_INT >= 21.I已编写的代码对于所有的情况。

要检查互联网连接,你可以调用这个函数。

public static boolean checkInternetConnection(Context context) {
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity == null) {
        return false;
    } else if(Build.VERSION.SDK_INT >= 21){
        Network[] info = connectivity.getAllNetworks();
        if (info != null) {
            for (int i = 0; i < info.length; i++) {
                if (info[i] != null && connectivity.getNetworkInfo(info[i]).isConnected()) {
                    return true;
                }
            }
        }
    } 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;
                }
            }
        }
        final NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo();
        if (activeNetwork != null && activeNetwork.isConnected()) {
            return true;
        }
    }

    return false;
}


Answer 4:

就我而言,我关掉了无线网络,但忘了关闭数据/移动网络连接。 一旦我做到了,在原来的职位代码为这个线程为我工作。

总结一下:

  1. 前往设置
  2. 关闭WiFi
  3. 进入设置 - >数据使用情况
  4. 关闭移动数据



Answer 5:

这是我如何把它一起在一个项目:

清单文件:

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

静态函数:

public static boolean isNwConnected(Context context) {
    if (context == null) {
        return true;
    }
    ConnectivityManager connectivityManager = 
        (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
    if (nwInfo != null && nwInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}


文章来源: Check network connection android