全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android 实时监测(监听)网络连接状态变化

看了网上的很多,都不是自己想要的。所以自己就参考着写了一个。

实现这个的方法很多,我是想的这种,如果哪有不足,有bug的地方希望大家指出,共同进步。。。。

先简单说一下思路:网络变化时系统会发出广播。所以我们监听这个广播,利用接口回调通知activity做相应的操作就好了。。

步骤:

           1、写个判断网络的工具类.

           2、先写个类继承BroadcastReceiver。(不要忘记在清单文件中注册)
          (谢谢ITzxl的提醒)需要在清单文件中添加权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

           3、写个回调接口

           4、BaseActivity实现这个接口

上代码:

/** 
 * 
 * @author cj 判断网络工具类 
 * 
 */ 
public class NetUtil { 
  /** 
   * 没有连接网络 
   */ 
  private static final int NETWORK_NONE = -1; 
  /** 
   * 移动网络 
   */ 
  private static final int NETWORK_MOBILE = 0; 
  /** 
   * 无线网络 
   */ 
  private static final int NETWORK_WIFI = 1; 
  public static int getNetWorkState(Context context) { 
    // 得到连接管理器对象 
    ConnectivityManager connectivityManager = (ConnectivityManager) context 
        .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager 
        .getActiveNetworkInfo(); 
    if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { 
      if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) { 
        return NETWORK_WIFI; 
      } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) { 
        return NETWORK_MOBILE; 
      } 
    } else { 
      return NETWORK_NONE; 
    } 
    return NETWORK_NONE; 
  } 
} 
/** 
 * 自定义检查手机网络状态是否切换的广播接受器 
 * 
 * @author cj 
 * 
 */ 
public class NetBroadcastReceiver extends BroadcastReceiver { 
  public NetEvevt evevt = BaseActivity.evevt; 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    // 如果相等的话就说明网络状态发生了变化 
    if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) { 
      int netWorkState = NetUtil.getNetWorkState(context); 
      // 接口回调传过去状态的类型 
      evevt.onNetChange(netWorkState); 
    } 
  } 
  // 自定义接口 
  public interface NetEvevt { 
    public void onNetChange(int netMobile); 
  } 
} 

记得在manifest中注册 

<receiver android:name="cn.broadcastreceiver.NetBroadcastReceiver" > 
      <intent-filter> 
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      </intent-filter> 
    </receiver> 
abstract public class BaseActivity extends FragmentActivity implements NetEvevt { 
  public static NetEvevt evevt; 
  /** 
   * 网络类型 
   */ 
  private int netMobile; 
  @Override 
  protected void onCreate(Bundle arg0) { 
    // TODO Auto-generated method stub 
    super.onCreate(arg0); 
    evevt = this; 
    inspectNet(); 
  } 
  /** 
   * 初始化时判断有没有网络 
   */ 
  public boolean inspectNet() { 
    this.netMobile = NetUtil.getNetWorkState(BaseActivity.this); 
    return isNetConnect(); 
    // if (netMobile == 1) { 
    // System.out.println("inspectNet:连接wifi"); 
    // } else if (netMobile == 0) { 
    // System.out.println("inspectNet:连接移动数据"); 
    // } else if (netMobile == -1) { 
    // System.out.println("inspectNet:当前没有网络"); 
    // 
    // } 
  } 
  /** 
   * 网络变化之后的类型 
   */ 
  @Override 
  public void onNetChange(int netMobile) { 
    // TODO Auto-generated method stub 
    this.netMobile = netMobile; 
    isNetConnect(); 
  } 
  /** 
   * 判断有无网络 。 
   * 
   * @return true 有网, false 没有网络. 
   */ 
  public boolean isNetConnect() { 
    if (netMobile == 1) { 
      return true; 
    } else if (netMobile == 0) { 
      return true; 
    } else if (netMobile == -1) { 
      return false; 
    } 
    return false; 
  } 
} 
public class MainActivity extends BaseActivity { 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    } 
@Override 
  public void onNetChange(int netMobile) { 
    // TODO Auto-generated method stub 
    //在这个判断,根据需要做处理 
  } 
} 

在这需要说明一下,手机在开着wifi长时间不用,自动黑屏长时间,会关闭流量,所以在下拉刷新的时候,把监测状态的提升语给隐藏了!


# android  # 监听网络状态  # Android 7.0 监听网络变化的示例代码  # android 监听网络状态的变化及实战的示例代码  # Android 动态注册监听网络变化实例详解  # Android 监听网络状态方法详解  # Android编程监听网络连接状态改变的方法  # Android 广播监听网络状态详解及实例代码  # Android网络状态实时监听实例代码(二)  # Android 网络状态实时监听代码实例(一)  # Android中监听判断网络连接状态的方法  # Android 对手机网络的检测和监听的方法示例  # 回调  # 接受器  # 长时间  # 自定义  # 我是  # 看了  # 在这个  # 在这  # 写了  # 希望大家  # 哪有  # 管理器  # 开着  # 不要忘记  # 有无  # 共同进步  # 黑屏  # 先写  # 发生了  # 就好了 


相关文章: 如何快速启动建站代理加盟业务?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  如何在建站之星绑定自定义域名?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  建站之星ASP如何实现CMS高效搭建与安全管理?  开封网站制作公司,网络用语开封是什么意思?  如何快速生成可下载的建站源码工具?  PHP正则匹配日期和时间(时间戳转换)的实例代码  C#如何在一个XML文件中查找并替换文本内容  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何确保西部建站助手FTP传输的安全性?  网站制作价目表怎么做,珍爱网婚介费用多少?  如何快速搭建支持数据库操作的智能建站平台?  建站之星如何防范黑客攻击与数据泄露?  建站之星在线版空间:自助建站+智能模板一键生成方案  建站VPS能否同时实现高效与安全翻墙?  建站之星北京办公室:智能建站系统与小程序生成方案解析  建站主机是什么?如何选择适合的建站主机?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何通过PHP快速构建高效问答网站功能?  宝塔新建站点为何无法访问?如何排查?  制作公司内部网站有哪些,内网如何建网站?  如何高效完成自助建站业务培训?  linux top下的 minerd 木马清除方法  如何在宝塔面板中创建新站点?  建站之星安装提示数据库无法连接如何解决?  建站之星如何快速解决建站难题?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  大连网站设计制作招聘信息,大连投诉网站有哪些?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  如何制作算命网站,怎么注册算命网站?  公司网站制作价格怎么算,公司办个官网需要多少钱?  javascript中的try catch异常捕获机制用法分析  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  建站之星如何助力网站排名飙升?揭秘高效技巧  清除minerd进程的简单方法  jQuery 常见小例汇总  建站主机服务器选购指南:轻量应用与VPS配置解析  制作网站外包平台,自动化接单网站有哪些?  建站之星代理如何优化在线客服效率?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  个人摄影网站制作流程,摄影爱好者都去什么网站?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何选择网络建站服务器?高效建站必看指南  北京网站制作网页,网站升级改版需要多久?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  c# 服务器GC和工作站GC的区别和设置  javascript中对象的定义、使用以及对象和原型链操作小结 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。