NetWorkObservable.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package com.xzjmyk.pm.activity;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.IntentFilter;
  6. import android.database.Observable;
  7. import android.net.ConnectivityManager;
  8. import android.util.Log;
  9. import com.xzjmyk.pm.activity.NetWorkObservable.NetWorkObserver;
  10. import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
  11. public class NetWorkObservable extends Observable<NetWorkObserver> {
  12. public static interface NetWorkObserver {
  13. public void onNetWorkStatusChange(boolean connected);
  14. }
  15. private Context mContext;
  16. private ConnectivityManager mConnectivityManager;
  17. private boolean mIsNetWorkActive;// 当前网络是否连接上
  18. private boolean mRegisted;// 是否注册了广播
  19. NetWorkObservable(Context context) {
  20. mContext = context;
  21. // 获取程序启动时的网络状态
  22. mConnectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
  23. mIsNetWorkActive = CommonUtil.isNetWorkConnected(mContext);
  24. //isGprsOrWifiConnected();
  25. if (AppConfig.DEBUG) {
  26. Log.d(AppConfig.TAG, "mIsNetWorkActive:" + mIsNetWorkActive);
  27. }
  28. // 注册网络监听广播
  29. IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  30. mContext.registerReceiver(mNetWorkChangeReceiver, intentFilter);
  31. mRegisted = true;
  32. }
  33. private boolean isGprsOrWifiConnected() {
  34. // NetworkInfo gprs = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
  35. // NetworkInfo wifi = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
  36. // boolean isConnectedGprs = gprs != null && gprs.isConnected();
  37. // boolean isConnectedWifi = wifi != null && wifi.isConnected();
  38. return CommonUtil.isNetWorkConnected(MyApplication.getInstance());
  39. }
  40. private BroadcastReceiver mNetWorkChangeReceiver = new BroadcastReceiver() {
  41. @Override
  42. public void onReceive(Context context, Intent intent) {
  43. if (!intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
  44. return;
  45. }
  46. final boolean isConnected = isGprsOrWifiConnected();
  47. if (mIsNetWorkActive != isConnected) {// 和之前的状态不同
  48. mIsNetWorkActive = isConnected;
  49. notifyChanged(mIsNetWorkActive);
  50. }
  51. }
  52. };
  53. public void notifyChanged(boolean connected) {
  54. synchronized (mObservers) {
  55. for (int i = mObservers.size() - 1; i >= 0; i--) {
  56. mObservers.get(i).onNetWorkStatusChange(connected);
  57. }
  58. }
  59. }
  60. public void release() {
  61. if (mRegisted && mContext != null) {
  62. mContext.unregisterReceiver(mNetWorkChangeReceiver);
  63. mRegisted = false;
  64. }
  65. unregisterAll();
  66. }
  67. public boolean isNetworkActive() {
  68. return mIsNetWorkActive;
  69. }
  70. }