Android 如何检查互联网接入?
所以,我的问题是如何检查我是否收到任何数据。场景是我连接到一个wifi网络,如星巴克wifi(该用户应首先连接到网络,然后在接收任何数据之前接受协议。) 此代码不符合我的目的Android 如何检查互联网接入?,android,networking,connectivity,Android,Networking,Connectivity,所以,我的问题是如何检查我是否收到任何数据。场景是我连接到一个wifi网络,如星巴克wifi(该用户应首先连接到网络,然后在接收任何数据之前接受协议。) 此代码不符合我的目的 ConnectivityManager cm = (ConnectivityManager) _mContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetwork
ConnectivityManager cm =
(ConnectivityManager) _mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
return true;
}
return false;
当我连接到网络,但我尚未接受协议时,返回true。谢谢,没有办法知道这一点,因为这不是在操作系统级别处理的事情,而是在路由器上处理的。操作系统只知道它是否已完成与路由器的握手并接收到IP。路由器是否会让他进入登录屏幕超出操作系统的范围。您可以通过尝试ping网站来检查这一点。比如说
try {
Socket s = new Socket("www.google.com", 80);
return s.getLocalAddress().getHostAddress();
// network connection available
} catch (Exception e) {
// no network connection
}
尽管如此,我还没试过。。但我认为它应该起作用
如果它不起作用,那么你可以尝试另一种方法。向google发送httprequest并等待响应。我的应用程序连接到云端web服务器上运行的一组web服务。因此,我需要确保在我的应用程序尝试执行操作之前,已建立此连接。我所做的不是检查互联网是否可用,而是呼叫我的一个服务。我有一个简单的TestService,它只返回单词“success”。因此,我的应用程序调用该服务,接收字符串“success”,并知道它已连接到internet并成功访问我的服务。我不必担心ConnectivityManager和NetworkInfo,因为这个解决方案工作得很好
当然,如果我的服务本身出现故障,那么我无法确定设备是否连接到互联网,我只能确定它没有到达我的服务。但是a)我确保我的服务是冗余的,并且有99.9%的正常运行时间;b)如果我的应用程序没有连接到我的服务,那么它就没有多大用处。检查internet的另一种选择可能是尝试连接到一家信誉良好的公司的公共服务,您知道该公司将一直在线。以下是我在异步任务中运行的内容:
public Boolean testServer(){
//stackoverflow.com/questions/9552743/proper-way-to-test-if-server-is-up-in-java
//stackoverflow.com/questions/9180072/android-check-connection-to-server
Boolean boolconnect = false;
try {
myUrl = new URL(UPLOAD_URL);
connection = myUrl.openConnection();
connection.setConnectTimeout(30*1000);
connection.connect();
Log.i(TAG, "FROM SERVER Connection made to: " + UPLOAD_URL);
boolconnect = true;
} catch (SocketException e) {
// TODO Auto-generated catch block
Log.i(TAG, "FROM SERVER socket exception:" + e);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
Log.i(TAG, "FROM SERVER Unknown host:" + e);
} catch (IOException e) {
// TODO Auto-generated catch block
Log.i(TAG, "FROM SERVER IOexception:" + e);
}
return boolconnect;
}
如果您想确定,您需要在isConnected为true时向服务器发送请求,并查看是否得到响应。我想您是对的。不过我没有试过。谢谢你的回答,我想说“没有办法”并不是很准确。我想如果我尝试连接到像谷歌这样的网站,我可以检查是否有任何数据。是这样吗?不过,我试图不实现我自己的逻辑。不,不管怎样,你都会得到回应。通常通过将所有流量重定向到网站来实现这些功能。您可以向自己的网站发送一个请求,该请求将返回一个固定的响应,并比较返回的数据。但是这是一个很好的工作量,你确定你从这个功能中获得了足够的实用性吗?你将不得不详细说明什么是不清楚的?谢谢你的代码,但当我尝试代码时,返回值在接受协议之前仍然为true,而协议本应为false。好的,从服务器下载一个字符串,并将其与该字符串进行比较。我想你确实有联系,但这是有限的。