检查网络连接android

时间:2012-04-04 11:03:00

标签: android networking connection

在我在模拟器上测试的应用程序中,我使用以下代码检查网络连接(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,即使我禁用了计算机的无线连接... 这是由模拟器引起的还是别的什么?

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

6 个答案:

答案 0 :(得分:36)

最好(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;

    }  

答案 1 :(得分:7)

要使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)

答案 2 :(得分:2)

我们可以使用以下功能检查互联网连接状态。 谷歌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;
}

答案 3 :(得分:0)

在我的情况下,我关闭了Wifi,但忘了关闭数据/移动网络连接。一旦我这样做了,这个帖子的原始帖子中的代码对我有效。

回顾一下:

  1. 转到设置
  2. 关闭Wifi
  3. 转到设置 - &gt;数据使用
  4. 关闭移动数据
  5. Settings

    Settings->Data Usage

答案 4 :(得分:0)

使用following class,已更新为最新发布的API:29。

var spawn = require("child_process").spawn,child;
child = spawn("powershell.exe",["c:\\temp\\helloworld.ps1"]);
child.stdout.on("data",function(data){
    console.log("Powershell Data: " + data);
});
child.stderr.on("data",function(data){
    console.log("Powershell Errors: " + data);
});
child.on("exit",function(){
    console.log("Powershell Script finished");
});
child.stdin.end(); //end input

答案 5 :(得分:-1)

这就是我把它放在一个项目中的方式:

清单文件:

<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;
}