我已经构建了一个需要连续访问Internet的Android应用程序。我想连续检查它,不仅是设备连接到WiFi还是它可以检索数据(有时它连接到WiFi但仍然没有互联网访问)。有没有办法实现这一目标?此方法对用户也是友好的(它会占用更多数据)吗?
答案 0 :(得分:0)
我想连续检查,不仅是设备已连接 到WiFi,但它也可以检索数据(有时它是 连接到WiFi,但仍然没有互联网接入)。有没有 实现这一目标的方法?
是的,这是可能的。来自here的代码:
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
您可以在发出网络请求之前运行此功能。
或者,您可以实施BoadcastReceiver
并收到有关网络连接更改的通知。您需要注册该操作:
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
developer guide中的更多信息。
答案 1 :(得分:0)
你可以使用它。
public boolean isConnected() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
isConnected用于检查与网络的连接,然后使用以下代码检查Internet可访问性
public boolean isOnline() {
if (isConnected()) {
try {
URL url = new URL("http://www.google.com"); // or any valid link.
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(3000);
urlc.connect();
if (urlc.getResponseCode() == 200) {
return true;
}
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
您可以从服务器类
调用此方法