How to show message if no internet available in my android webview

前端 未结 6 1851
野的像风
野的像风 2020-12-30 17:07

Hi I am working with android webview application.I uses my the url succesfully in my app and it works only if internet connection available .But I want to show some messages

6条回答
  •  轮回少年
    2020-12-30 17:20

    I did it this way:

    Create two java files as below:

    NetworkConnectivity.java

    package com.connectivity;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.Handler;
    
    public class NetworkConnectivity {
    
        private static NetworkConnectivity sharedNetworkConnectivity = null;
    
        private Activity activity = null;
    
        private final Handler handler = new Handler();
        private Runnable runnable = null;
    
        private boolean stopRequested = false;
        private boolean monitorStarted = false;
    
        private static final int NETWORK_CONNECTION_YES = 1;
        private static final int NETWORK_CONNECTION_NO = -1;
        private static final int NETWORK_CONNECTION_UKNOWN = 0;
    
        private int connected = NETWORK_CONNECTION_UKNOWN;
    
        public static final int MONITOR_RATE_WHEN_CONNECTED_MS = 5000;
        public static final int MONITOR_RATE_WHEN_DISCONNECTED_MS = 1000;
    
        private final List networkMonitorListeners = new ArrayList();
    
        private NetworkConnectivity() {
        }
    
        public synchronized static NetworkConnectivity sharedNetworkConnectivity() {
            if (sharedNetworkConnectivity == null) {
                sharedNetworkConnectivity = new NetworkConnectivity();
            }
    
            return sharedNetworkConnectivity;
        }
    
        public void configure(Activity activity) {
            this.activity = activity;
        }
    
        public synchronized boolean startNetworkMonitor() {
            if (this.activity == null) {
                return false;
            }
    
            if (monitorStarted) {
                return true;
            }
    
            stopRequested = false;
            monitorStarted = true;
    
            (new Thread(new Runnable() {
                @Override
                public void run() {
                    doCheckConnection();
                }
            })).start();
    
            return true;
        }
    
        public synchronized void stopNetworkMonitor() {
            stopRequested = true;
            monitorStarted = false;
        }
    
        public void addNetworkMonitorListener(NetworkMonitorListener l) {
            this.networkMonitorListeners.add(l);
            this.notifyNetworkMonitorListener(l);
        }
    
        public boolean removeNetworkMonitorListener(NetworkMonitorListener l) {
            return this.networkMonitorListeners.remove(l);
        }
    
        private void doCheckConnection() {
    
            if (stopRequested) {
                runnable = null;
                return;
            }
    
            final boolean connectedBool = this.isConnected();
            final int _connected = (connectedBool ? NETWORK_CONNECTION_YES
                    : NETWORK_CONNECTION_NO);
    
            if (this.connected != _connected) {
    
                this.connected = _connected;
    
                activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        notifyNetworkMonitorListeners();
                    }
                });
            }
    
            runnable = new Runnable() {
                @Override
                public void run() {
                    doCheckConnection();
                }
            };
    
            handler.postDelayed(runnable,
                    (connectedBool ? MONITOR_RATE_WHEN_CONNECTED_MS
                            : MONITOR_RATE_WHEN_DISCONNECTED_MS));
        }
    
        public boolean isConnected() {
            try {
                ConnectivityManager cm = (ConnectivityManager) activity
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo netInfo = cm.getActiveNetworkInfo();
    
                if (netInfo != null && netInfo.isConnected()) {
                    return true;
                } else {
                    return false;
                }
            } catch (Exception e) {
                return false;
            }
        }
    
        private void notifyNetworkMonitorListener(NetworkMonitorListener l) {
            try {
                if (this.connected == NETWORK_CONNECTION_YES) {
                    l.connectionEstablished();
                } else if (this.connected == NETWORK_CONNECTION_NO) {
                    l.connectionLost();
                } else {
                    l.connectionCheckInProgress();
                }
            } catch (Exception e) {
            }
        }
    
        private void notifyNetworkMonitorListeners() {
            for (NetworkMonitorListener l : this.networkMonitorListeners) {
                this.notifyNetworkMonitorListener(l);
            }
        }
    
    }
    

    NetworkMonitorListener.java

    package com.connectivity;
    
    public interface NetworkMonitorListener {
    
        public void connectionEstablished();
        public void connectionLost();
        public void connectionCheckInProgress();
    }
    

    And finally, the usage:

    NetworkConnectivity.sharedNetworkConnectivity().configure(this);
            NetworkConnectivity.sharedNetworkConnectivity().startNetworkMonitor();
            NetworkConnectivity.sharedNetworkConnectivity()
                    .addNetworkMonitorListener(new NetworkMonitorListener() {
                        @Override
                        public void connectionCheckInProgress() {
                            // Okay to make UI updates (check-in-progress is rare)
                        }
    
                        @Override
                        public void connectionEstablished() {
                            // Okay to make UI updates -- do something now that
                            // connection is avaialble
    
                            Toast.makeText(getBaseContext(), "Connection established", Toast.LENGTH_SHORT).show();
                        }
    
                        @Override
                        public void connectionLost() {
                            // Okay to make UI updates -- bummer, no connection
    
                            Toast.makeText(getBaseContext(), "Connection lost.", Toast.LENGTH_LONG).show();
                        }
                    });
    

    With the above usage, you will be able to check for internet connection in runtime. As soon as the internet connection is lost, Toast will appear (as per the above code).

提交回复
热议问题