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

时间:2018-12-18 12:03:15

标签: java android network-programming

我正在研究一个android项目,在其中我需要一种主动检查Internet连接的方法。

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

我现在拥有的代码在连接到WiFi时仅显示绿色(天气是否可以访问Internet),或者红色,我还想每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秒进行一次此检查。我该怎么办?

1 个答案:

答案 0 :(得分:0)

我使用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);