Android究竟是如何确定以下状态的区别的?
网络接口处于活动状态(例如 Wifi 或 3G),但无法访问互联网。
具有活动的网络接口,并且需要要求用户在网页上登录网络。
具有活动的网络接口并且能够访问互联网。
它是否可能向固定 URL(可能在 google.com 上?)发送一个简单的 HTTP 请求并检查返回的文档是否符合预期?如果是这样,我们是否知道使用的 URL?
Android究竟是如何确定以下状态的区别的?
网络接口处于活动状态(例如 Wifi 或 3G),但无法访问互联网。
具有活动的网络接口,并且需要要求用户在网页上登录网络。
具有活动的网络接口并且能够访问互联网。
它是否可能向固定 URL(可能在 google.com 上?)发送一个简单的 HTTP 请求并检查返回的文档是否符合预期?如果是这样,我们是否知道使用的 URL?
更新:更新代码以避免NetworkOnMainThreadException
我目前正在使用以下方法来确定设备是否可以访问互联网:
public class NetworkConnectivityHelper {
public void isDeviceConnectedToInternet(final Activity activity, final ResultCallback callback){
new Thread(new Runnable() {
@Override
public void run() {
boolean isDeviceConnectedToInternet = false;
NetworkInfo activeNetworkInfo = ((ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if(activeNetworkInfo != null && activeNetworkInfo.isConnected()){
try {
InetAddress.getByName("google.com").isReachable(2);
isDeviceConnectedToInternet = true;
} catch (UnknownHostException e){
isDeviceConnectedToInternet = false;
} catch (IOException e){
isDeviceConnectedToInternet = false;
}
}
final boolean result = isDeviceConnectedToInternet;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
callback.done(result);
}
});
}
}).start();
}
public static abstract class ResultCallback{
public abstract void done(boolean connected);
}
}
通过以下方式调用:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
//Populate
NetworkConnectivityHelper networkConnectivityHelper = new NetworkConnectivityHelper();
networkConnectivityHelper.isDeviceConnectedToInternet(activity, new NetworkConnectivityHelper.ResultCallback() {
@Override
public void done(boolean connected) {
if (connected) {
//Yey, the device is connected.
//Now, do some work
}else{
//The device is disconnected
}
}
});
....
}
希望这可以帮助!
尝试这个:
public static boolean isNetworkAvailable(Context context)
{
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
return (info != null);
}
是的,您也可以发送 ping :)
您应该在小型网络实用程序类中使用的订单操作是: - 检查接口是否在线 - 检查它是否能够打开到 Google.com 的套接字或 ping google.com