監聽網絡狀態變化的Android代碼

jopen 11年前發布 | 34K 次閱讀 Android Android開發 移動開發

下面代碼,監聽網絡狀態變化,當網絡連接開啟或關閉時將調用回調函數。

使用方法,你需創建一個 實例,同時在你的onCreate()和onResume方法中調用 bind(this)
在onPause方法調用unbind()

然后你可以做兩件事:
1.在任何時刻調用hasConnection()檢查網絡狀態。
2.實現OnNetworkAvailableListener接口,網絡狀態變化時會得到通知。

你需要以下權限:

    android.permission.INTERNET  
    android.permission.ACCESS_NETWORK_STATE  
    public class ConnectivityReceiver extends BroadcastReceiver {  

        public static interface OnNetworkAvailableListener {  
            public void onNetworkAvailable();  
            public void onNetworkUnavailable();  
        }  

        private final ConnectivityManager connectivityManager;  
        private OnNetworkAvailableListener onNetworkAvailableListener;  
        private boolean connection = false;  

        public ConnectivityReceiver(Context context) {  
            connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
            checkConnectionOnDemand();  
        }  

        public void bind(Context context) {  
            IntentFilter filter = new IntentFilter();  
            filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);  
            context.registerReceiver(this, filter);  
            checkConnectionOnDemand();  
        }  

        public void unbind(Context context) {  
            context.unregisterReceiver(this);  
        }  

        private void checkConnectionOnDemand() {  
            final NetworkInfo info = connectivityManager.getActiveNetworkInfo();  
            if (info == null || info.getState() != State.CONNECTED) {  
                if (connection == true) {  
                    connection = false;  
                    if (onNetworkAvailableListener != null) onNetworkAvailableListener.onNetworkUnavailable();  
                }  
            }  
            else {  
                if (connection == false) {  
                    connection = true;  
                    if (onNetworkAvailableListener != null) onNetworkAvailableListener.onNetworkAvailable();  
                }  
            }  
        }  

        @Override  
        public void onReceive(Context context, Intent intent) {  
            if (connection == true && intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)) {  
                connection = false;  
                if (onNetworkAvailableListener != null) {  
                    onNetworkAvailableListener.onNetworkUnavailable();  
                }  
            }  
            else if (connection == false && !intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)) {  
                connection = true;  
                if (onNetworkAvailableListener != null) {  
                    onNetworkAvailableListener.onNetworkAvailable();  
                }  
            }  
        }  

        public boolean hasConnection() {  
            return connection;  
        }  

        public void setOnNetworkAvailableListener(OnNetworkAvailableListener listener) {  
            this.onNetworkAvailableListener = listener;  
        }  

    }  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!