在没有ping的情况下使用Android检查热点wifi连接

在没有ping的情况下使用Android检查热点wifi连接,android,wifi,Android,Wifi,我正在开发一个Android projet,我需要知道用户何时可以访问互联网。(不仅仅是在wifi被激活的情况下。例如,在用户使用热点wifi连接的情况下) 我使用这种方法: public static boolean isOnline(final Context context) { boolean result = false; ConnectivityManager connec = (ConnectivityManager) context.getSystemServic

我正在开发一个Android projet,我需要知道用户何时可以访问互联网。(不仅仅是在wifi被激活的情况下。例如,在用户使用热点wifi连接的情况下)

我使用这种方法:

public static boolean isOnline(final Context context) {
    boolean result = false;
    ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connec.getNetworkInfo(0).isConnectedOrConnecting() || connec.getNetworkInfo(1).isConnectedOrConnecting()) {
        URL url = new URL("https://www.google.fr");
        URLConnection urlConnection;
        urlConnection = url.openConnection();
        HttpURLConnection httpConnection = (HttpURLConnection) urlConnection;
        int responseCode = httpConnection.getResponseCode();
        result = (responseCode == 200);
    }
    return result;
}
此方法可以工作,但会减慢我的应用程序的速度,因为它在计时器中使用,计时器每5秒检查一次用户的连接。我需要实时知道用户的连接状态

有人知道另一种验证互联网连接的方法吗? 也许用java反射

ConnectivityManager mConnMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

public boolean hasWifi() {
    return mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null
            && mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
}

这就是你想要的吗?

也许你可以在这个问题中找到一些东西:谢谢你的快速回答!:-)我来看看。你到底为什么要每五秒钟检查一次网络可用性?你会很快耗尽电池电量。如果需要经常传输数据,只需传输数据而不使用单独的在线检查即可;数据传输请求本身会在您脱机时告诉您。我找不到问题的答案。每个人都会在NetworkInfo或ping web url上进行测试,以了解设备是否已连接。我无法执行ping,因为它会减慢我的应用程序。。。此外,如果URL处的网站崩溃,即使设备已连接,ping也会失败……如果设备连接到热点Wifi,该方法将不起作用。您已有效连接到Wifi,但当您尝试启动请求时,例如在google网站上,您将被重定向到热点的门户。。。