连接到 WiFi 时检查互联网连接

Checking for internet connection when connected to a WiFi

我正在做一个 android 项目,在这个项目中我需要一种主动检查互联网连接的方法。

应用程序应该在无法连接到 Internet 时显示红点(尽管它已连接到 WiFi),如果可以连接则显示绿点。

我现在的代码只是在连接到 WiFi 时显示绿色(无论 WiFi 是否可以访问互联网)或红色,而且我想每 10 秒检查一次(天气它可以连接到虽然它已连接到 WiFi)。

我正在使用此代码:

  connectivityManager= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            ImageView NetworkStatus = (ImageView)viewGroup.findViewById(R.id.networkAvailability);
            NetworkRequest.Builder builder = new NetworkRequest.Builder();

            connectivityManager.registerNetworkCallback(
                    builder.build(),
                    new ConnectivityManager.NetworkCallback() {
                        @Override
                        public void onAvailable(Network network) {

                                if(isOnline()){
                                    NetworkStatus.setImageResource(R.drawable.network_circle_on);
                                }
                                else
                                    {
                                        NetworkStatus.setImageResource(R.drawable.network_circle_off);

                                    }
                        }
                        @Override
                        public void onLost(Network network) {

                            NetworkStatus.setImageResource(R.drawable.network_circle_off);
                        }
                    }

            );

isOnline() 方法是这样的:

public boolean isOnline() {
    try {
        int timeoutMs = 1500;
        Socket sock = new Socket();
        SocketAddress sockaddr = new InetSocketAddress("8.8.8.8", 53);
        sock.connect(sockaddr, timeoutMs);
        sock.close();
        return true;
    } catch (IOException e) { return false; }
}

而且,我还需要每 10 秒进行一次此检查。我应该怎么做?

我使用 ScheduledExecutorService 解决了我的问题。

scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
                public void run() {

                    connectivityManager.registerNetworkCallback(
                            builder.build(),
                            new ConnectivityManager.NetworkCallback() {
                                @Override
                                public void onAvailable(Network network) {

                                    if(isOnline()){
                                        NetworkStatus.setImageResource(R.drawable.network_circle_on);
                                    }
                                    else
                                    {
                                        NetworkStatus.setImageResource(R.drawable.network_circle_off);

                                    }
                                }

                                @Override
                                public void onLost(Network network) {

                                    NetworkStatus.setImageResource(R.drawable.network_circle_off);
                                }
                            }

                    );

                }
            }, 0, 4, TimeUnit.SECONDS);