我必须实现一个控制互联网连接存在的功能,我需要确切地知道你是否可以浏览,不知道你是否连接到wifi或数据。
在某些情况下,您可能会连接到网络,但无法浏览,例如当您连接到开放式wifi网络(例如Mc Donalds)时,但要导航则需要登录,连接可用,但您不是能够浏览。
在这种情况下,我就足以利用设置超时(但从未考虑过)。
我试图实现不同的功能,但我无法获得所需的结果,例如:
public boolean checkConnection() {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
boolean response;
if (netInfo != null && netInfo.isConnected()) {
try {
URL url = new URL("http://www.google.it");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(1000);
conn.connect();
response = conn.getResponseCode() == 200;
conn.disconnect();
} catch (Exception e) {
response = false;
}
} else {
response = false;
}
return response;
}
另一个功能:
public boolean isInternetAvailable(String address, int port, int timeoutMs) {
try {
Socket sock = new Socket();
SocketAddress sockaddr = new InetSocketAddress(address, port);
sock.connect(sockaddr, timeoutMs);
sock.close();
return true;
} catch (IOException e) { return false; } }
此功能永远不会考虑超时。
我如何解决我的问题?
****************编辑1 ****************
我正在通过wifi连接到网络的平板电脑上测试代码,通过防火墙我阻止了所有连接,以模拟任何问题中描述的情况。使用建议给我的代码,你会注意到超时值永远不会被遵守,应用程序进入异常:
异常:java.net.UnknownHostException:无法解析主机 “www.google.com”:没有与主机名相关联的地址。
真正的问题是所有这些功能都需要很长时间才能告诉我没有连接,我需要一个在1/2秒内响应的功能
答案 0 :(得分:1)
cat prova.ksh
#!/bin/ksh
echo start
while read line; do
echo $line
done < "/your/complete/path/File1.xml"
答案 1 :(得分:1)
检查您是否具有输出互联网连接的最简单方法是ping一些随机服务器(www.google.com
可能是一个很好的例子):
InetAddress.getByName("www.google.com").isReachable(5000)
答案 2 :(得分:-1)
你可以完全做其他事情。
拥有一台始终在服务器上运行的服务,并确保您拥有该服务的网址。
每次要检查连接时,都可以从应用中调用该服务。检查该服务的响应代码,或者让它返回给您。根据结果代码或服务返回的数据,您可以得出结论是否有可用的互联网连接。
也许有更简单的方法来做你要求的但是这个肯定会有用。