gpt4 book ai didi

android - 检查实际的互联网连接

转载 作者:搜寻专家 更新时间:2023-11-01 08:01:07 25 4
gpt4 key购买 nike

我在应用程序中使用以下代码来检查互联网连接。它确实有效,即如果没有互联网就会说没有互联网(与使用 ConnectivityManager 不同,它只会告诉您是否连接到路由器/3g,但实际上不会检查互联网连接),但仅直到有人连接到将用户重定向到登录页面的 wifi 点。然后该应用程序将返回一个 200 代码并尝试继续,但最终会崩溃(并且崩溃有点安静)。我的应用程序主要用于具有此类 wifi 点的位置。如何检查请求是否已重定向?

class online extends AsyncTask<String, String, String> 
{
boolean responded = false;
@Override
protected void onPreExecute()
{
super.onPreExecute();
pDialog2 = new ProgressDialog(Main.this);
pDialog2.setMessage("Checking internet, please wait...");
pDialog2.setIndeterminate(false);
pDialog2.setCancelable(false);
pDialog2.show();
}

protected String doInBackground(String... args)
{
try
{

URL url = new URL("http://mydomain.com/connectionTest.html");

HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(6000); // Timeout is in seconds
urlc.setReadTimeout(6000);
urlc.connect();
if (urlc.getResponseCode() == 200)
{
responded = true;
} else
{

}

} catch (IOException e)
{
}

try
{
int waited = 0;
while (!responded && (waited < 5000))
{
mHandler.postDelayed(new Runnable()
{
public void run()
{
}
}, 100);
waited += 100;
}
}
finally
{
if (!responded)
{
h.sendEmptyMessage(0);
}
else
{
h.sendEmptyMessage(1);
}
}
return null;
}

protected void onPostExecute(String file_url)
{
pDialog2.dismiss();
}
}

最佳答案

如果您可以控制要连接的网络服务,则可以使用与 Google 检查 Wi-Fi 重定向门户的方式类似的技巧。

您偶尔会看到发送到 http://google.com/generate_204 的请求。如果您在公共(public)访问点密码页面后面,那么您通常会从拦截 Web 请求的服务器收到 200 Ok 以提供登录页面。如果用户已经登录,那么您将从该服务收到 HTTP 204 No Content 状态。

要检查您是否可以访问公共(public)网络,您可以运行以下命令;

URL url = new URL("http://google.com/generate_204");
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();
httpUrlConnection.setConnectTimeout(6000); // Timeout is in seconds
httpUrlConnection.setReadTimeout(6000);
httpUrlConnection.connect();
if (httpUrlConnection.getResponseCode() == HttpURLConnection.HTTP_NO_CONTENT) {
// Great you have free access to the web
} else {
// Either your server is mis-configured or you are behind a hotspot login screen
}

理想情况下,您会在您的网络服务器上托管您自己的 /generate_204,这样您就不会被 Google 未记录的更改所捕获。它还可以作为检查设备与服务器的可达性的一种方式。

将它与 ConnectivityManager 结合使用应该可以让您清楚地了解网络状态和服务器的可达性。

关于android - 检查实际的互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21103229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com