如何在Android中检查互联网连接以验证wifi连接?

5

当wifi连接到无线调制解调器时,是否有互联网覆盖总是显示已连接,它只检查wifi的连接性而不是互联网的连接性,那么如何处理这种情况?

当WiFi连接到无线调制解调器时,只能检测到WiFi的连接状况,无法直接检测互联网连接。因此,即使互联网连接有问题,WiFi连接状态也会显示为“已连接”。要解决这种情况,可以尝试以下方法:

Android如何实现WiFi连接?如何检查Android的WiFi连接状态? - Samir Mangroliya
尝试连接到一个知名的网站,例如stackoverflow.com - 如果连接成功,则表示您已经连接到互联网。 - Aleks G
@AleksG 如果我尝试连接,那么活动将一直挂起,直到我们获得连接...会发生死锁情况。 - karthik
你可以在尝试连接之前设置套接字超时。如果将超时设置为3秒,则会尝试连接3秒钟,如果不成功则返回失败。 - Aleks G
@AleksG: 有时候即使有网络连接,但速度很慢。在这种情况下,可能会发生超时并返回失败消息,对吧。 - karthik
7个回答

3

1.) 你可以通过以下方式来检查它:

URL url = new URL("YOUR urlString");
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
.
.
int responseCode = conn.getResponseCode();
//if responseCode = 200 - THEn CONN is connected

或者

2.) 你可以这样做:

public static boolean isNetworkAvailable(Activity activity) {
        ConnectivityManager connectivity = (ConnectivityManager) activity
                .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;  //<--  --  -- Connected
                    }
                }
            }
        }
        return false;  //<--  --  -- NOT Connected
    }

Chintan:我尝试了第二种方法。即使我断开了Wi-Fi,它在网络信息中仍显示已连接。我不知道该怎么办? - karthik
第一个是最好的方法(y) - RBK

1
使用此代码。
final ConnectivityManager connectivityManager = (ConnectivityManager)context.
            getSystemService(Context.CONNECTIVITY_SERVICE);

final Network network = connectivityManager.getActiveNetwork();
final NetworkCapabilities capabilities = connectivityManager
            .getNetworkCapabilities(network);

return capabilities != null
                && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);

1

试一下。

private boolean haveNetworkConnection(Context context)
    {
        boolean haveConnectedWifi = false;
        boolean haveConnectedMobile = false;

        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfo = cm.getAllNetworkInfo();
        for (NetworkInfo ni : netInfo)
        {
            if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            {
                if (ni.isConnected())
                {
                    haveConnectedWifi = true;
                    Log.v("WIFI CONNECTION ", "AVAILABLE");
                } else
                {
                    Log.v("WIFI CONNECTION ", "NOT AVAILABLE");
                }
            }
            if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            {
                if (ni.isConnected())
                {
                    haveConnectedMobile = true;
                    Log.v("MOBILE INTERNET CONNECTION ", "AVAILABLE");
                } else
                {
                    Log.v("MOBILE INTERNET CONNECTION ", "NOT AVAILABLE");
                }
            }
        }
        return haveConnectedWifi || haveConnectedMobile;
    }

希望能对您有所帮助。


0

您可以使用此功能在Android上检查wifi或移动数据连接的互联网连接。

 public boolean isConnected() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean NisConnected = activeNetwork != null && activeNetwork.isConnected();
        if (NisConnected) {
            //  if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE || activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
            if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
           return true;
            } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
                return true;
            else
                return false;
        }
        return false;
    }

0

0

如果您只使用ConnectivityManager,则仅提供连接信息(WiFi、移动网络、WiMax等)以及是否已连接。

为确保数据连接,您可以进行ping测试:

public static boolean ping() {

    try {
        SocketAddress addr = new InetSocketAddress("www.example.com", 80); // Set IP/Host and Port
        Socket socket = new Socket();
        //Connect socket to address, and set a time-out to 5 sec
        socket.connect(addr, 5000);
        //If network isn't conecctet then throw a IOException else socket is connected successfully
        socket.close();
        return true;
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return true;
}

0

就像这样

public static boolean isNetworkAvailable(Context context)
{
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    return networkInfo != null && networkInfo.isConnectedOrConnecting();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接