Android如何准确确定以下状态之间的差异?

  • 网络接口(interface)处于 Activity 状态(例如Wifi或3G),但无法访问互联网。
  • 已激活网络接口(interface),并且需要要求用户登录网页上的网络。
  • 具有 Activity 的网络接口(interface),并且可以访问Internet。

  • 它是否可能会向固定的网址(可能在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
                }
            }
        });
        ....
    
    }
    

    希望这可以帮助!

    10-06 16:21
    查看更多