15

Android究竟是如何确定以下状态的区别的?

  1. 网络接口处于活动状态(例如 Wifi 或 3G),但无法访问互联网。

  2. 具有活动的网络接口,并且需要要求用户在网页上登录网络。

  3. 具有活动的网络接口并且能够访问互联网。

它是否可能向固定 URL(可能在 google.com 上?)发送一个简单的 HTTP 请求并检查返回的文档是否符合预期?如果是这样,我们是否知道使用的 URL?

4

3 回答 3

0

更新:更新代码以避免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
            }
        }
    });
    ....

}

希望这可以帮助!

于 2012-11-20T23:26:53.073 回答
-1

尝试这个:

public static boolean isNetworkAvailable(Context context)
{
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();

    return (info != null);
}
于 2012-11-15T19:58:58.930 回答
-1

是的,您也可以发送 ping :)

您应该在小型网络实用程序类中使用的订单操作是: - 检查接口是否在线 - 检查它是否能够打开到 Google.com 的套接字或 ping google.com

于 2012-11-15T19:52:24.903 回答