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