检查网络连接android

amp*_*amp 12 connection networking android

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

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

true即使我禁用了计算机的无线连接,此方法也始终返回...这是由模拟器引起的还是其他原因?

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

Nis*_*ant 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;

    }  
Run Code Online (Sandbox Code Playgroud)


小智 7

要使getActiveNetworkInfo()生效,您需要将以下内容添加到清单中.

1. uses-permission android:name="android.permission.INTERNET"
 2. uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE"
Run Code Online (Sandbox Code Playgroud)

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

并试试这个

Context.getSystemService(Context.CONNECTIVITY_SERVICE).getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
Run Code Online (Sandbox Code Playgroud)

要么

Context.getSystemService(Context.CONNECTIVITY_SERVICE).requestRouteToHost(TYPE_WIFI, int hostAddress)
Run Code Online (Sandbox Code Playgroud)