7

我做了一个程序,我必须使用wifi连接互联网。我找到了一些信息来检查wifi是否连接。但是在某些情况下,您可以连接wifi AP,但您仍然无法上网,例如wifi需要帐户和密码才能在https中进行证书,或者wifi AP无法上网。那么,如何检查真正的互联网连接呢?

4

3 回答 3

5

只需对 www.google.com 进行“Ping”,他们失败的可能性非常低。

PS这是我们在我们的应用程序中所做的..

public static boolean isReachable(Context context) {
    //  First, check we have connectivity
    final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo netInfo = connMgr.getActiveNetworkInfo();

    if (netInfo != null && netInfo.isConnected()) {
        //  check if google is reachable
        try {
            URL url = new URL("http://www.google.com");
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(10 * 1000); // Ten seconds timeout in milliseconds
            urlc.connect();
            if (urlc.getResponseCode() == 200) { // success
                return true;
            } else { // Fail
                return false;
            }
        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
            return false;
        }
    } else {
        return false;
    }
}
于 2012-11-04T10:36:49.773 回答
2

请参考以下:

创建一个返回布尔值的方法:

    ConnectivityManager connectivityManager;
    NetworkInfo wifiInfo, mobileInfo;

    public Boolean checkNow(Context con){
    try{
        connectivityManager = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE);
        wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  

        if(wifiInfo.isConnected() || mobileInfo.isConnected())
        {
            return true;
        }
    }
    catch(Exception e){
        System.out.println("CheckConnectivity Exception: " + e.getMessage());
    }

    return false;
}   

在您的方法中使用上述方法,如下所示onCreate()

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

       boolean con = checkNow(getApplicationContext());

       if(con){
           Toast.makeText(getApplicationContext(), "Connection Founded", Toast.LENGTH_SHORT).show();
       }else{
           Toast.makeText(getApplicationContext(), "Connection Not Founded", Toast.LENGTH_SHORT).show();
       }

}

当您运行该应用程序时,您将提示"Connection Founded"您的设备是否有互联网连接,否则会提示"Connection Not Founded"

于 2012-11-04T11:01:47.927 回答
1

根据下面的方法,如果设备不处于飞行模式或在任​​何连接模式下都没有可用的网络,则方法将返回 false,否则返回 true。请记住,如果满足上述情况,它将返回 null。因此,它是通过检查空 netInfo 对象来处理的。

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

}

请记住获得访问清单的网络状态的权限。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2012-11-04T10:53:12.927 回答