Android 监控网络状态

  在Android网络应用程序开发中,经常要判断网络连接是否可用,因此经常有必要监听网络状态的变化。android的网络状态监听可以用BroadcastReceiver来接收网络状态改变的广 播,具体实现如下:

  当我们要在程序中监听网络状态时,只要一下几个步骤即可:

1、定义Receiver

  定义一个Receiver重载其中的onReceive函数,在其中完成所需要的功能,如根据WIFI和GPRS是否断开来改变空间的外观

 connectionReceiver = new BroadcastReceiver() {

         @Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
Log.i(TAG, "unconnect");
// unconnect network
}else { // connect network
}
}
};

2、注册Receiver

  在适当的地方注册Receiver,可以在程序中注册,在onCreate中调用如下函数即可:

     IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
context.registerReceiver(connectionReceiver, intentFilter);

3、注销Receiver

  在适当时注销Receiver,可以在程序中取消,在onDestroye中调用如下函数即可:

 if (connectionReceiver != null) {
unregisterReceiver(connectionReceiver);
}

  Ps:网上还有很多关于使用TelephonyManager 的方法的,方法如下(但是我试了好几次都有问题,如每次第一次进入一个Activity时会自动收到网络断开的信号,每次网络状态改变时收到多次回调且状态不正确。不知道有什么要注意的地方,求指点!)

 final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  

 mTelephonyMgr.listen(new PhoneStateListener(){
@Override
public void onDataConnectionStateChanged(int state) {
switch(state){
case TelephonyManager.DATA_DISCONNECTED://网络断开
break;
case TelephonyManager.DATA_CONNECTING://网络正在连接
break;
case TelephonyManager.DATA_CONNECTED://网络连接上
break;
}
}
}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

  PS中的方法并没有去尝试过。还是第一种比较好用。如果要程序隐藏在后台的话,建议开个service,将BroadcastReceiver注册在service,但不要忘了取消注册。

在测试中遇到过这样的状况,将一个当前连接wifi的路由设备关闭,但是程序并没有捕捉到unconnect network,可能是因为手机设备立刻连接另一个路由设备了。

  因为获取的是服务对象,所以这个网络状态都是时时刷新的,所以我们只需要得到网络状态就可以了!

Android网络状态监控的更多相关文章

  1. Android网络性能监控方案

    阿里云 云原生应用研发平台EMAS 刘宝文(木睿) 背景 移动互联网时代,移动端极大部分业务都需要通过App和Server之间的数据交互来实现,所以大部分App提供的业务功能都需要使用网络请求.如果因 ...

  2. .Neter玩转Linux系列之五:crontab使用详解和Linux的进程管理以及网络状态监控

    一.crontab使用详解 概述:任务调度:是指系统在某个时间执行的特定的命令或程序. 任务调度分类: (1)系统工作:有些重要的工作必须周而 复始地执行. (2)个别用户工作:个别用户可能希望执 行 ...

  3. 如何消除原生Android网络状态上的惊叹号

    喜欢使用原生Android系统的朋友可能会发现自己的状态栏信号图标上经常有一个惊叹号标志. 这是怎么回事呢?原因是Android为了对网络状态进行检测,采用了一种叫做captive detection ...

  4. iOS开发系列-网络状态监控

    概述 在网络应用中,需要对用户设别的网络状态进行实时监控,可以让用户了解自己的网络状态出现网络问题提示用户. 一般在网络状态不好的场景下需要做一些处理比如: WIFT/3G/4G网络:自动下载高清图. ...

  5. Android 网络状态的监控

    1 http://www.cnblogs.com/qingblog/archive/2012/07/19/2598983.html 2

  6. Android 网络状态检测

    package com.example.administrator.yunstore.net; import android.app.AlertDialog; import android.conte ...

  7. android 网络状态判断【转】

    import java.net.InetAddress; import android.app.Activity;import android.content.Context;import andro ...

  8. Linux网络实时监控配置

    Linux监控邮件发送配置 网络状态监控 网络状态:netstat 各个状态的总计,详情:以及重点端口的详细连接情况(22,25,80,3306,8080),打印客户端连接数最多的ip. 邮件报告当前 ...

  9. Android中判断网络连接是否可用及监控网络状态

    Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...

随机推荐

  1. 项目中遇到的HQL查询问题

    问题描写叙述: 目的:想要查询出全部最新版本号的组件 说明:组件:版本号 =1:n关系 ,假设这个组件仅仅有一个版本号也要可以查出来. 项目中使用的是内存数据库,无法看到表结构,这里的样例仅仅用于模拟 ...

  2. 支付宝移动支付之IOSApp调用支付宝钱包

    近期客户提出要开发一个IOS上的app作为訪问他们站点的途径之中的一个.为什么说之中的一个呢.因为眼下PC和Mobile这两个站眼下都已经上线了. 所以问题就简单了,我们仅仅须要把mobile站UI改 ...

  3. Hibernate4之session核心方法

    在学习session的核心方法之前,我们先了解下hibernate中几种对象的状态: 暂时状态:这样的状态就好像咱们公司请的暂时员工一样,他在公司里没有相关的资料和id. 特点:在使用代理主键的情况下 ...

  4. 4 Ionic导航和核心组件--旅游应用

    简介:在本节课中,我们将会通过一个虚构的旅游景点来构建一款功能完善的应用.本应用的核心特性是管理用户的应用内导航.本节课的主要目的,是展现构建一个完整的应用的过程. 无论是什么移动应用,最重要的功能之 ...

  5. 下载Youku视频观看

    所需工具: 1.chorme内核浏览器,如Chorme.Firefox等等 2.vlc视频播放器 准备工作完成,开始工作 1.打开优酷的随便一个视频 2.按下F12选择Network(网络)选择Med ...

  6. PRD编写Axure内直接编辑

    流程&页面&交互&逻辑 功能点: 1,选项类 设置默认值. 2,输入文本类 设置最多最少字符数. 3,功能按钮,如提交.发布. 判断敏感词,如果有,则点击发布的时候,悬浮提醒“ ...

  7. rm -rf / – Deletes Everything!

    https://www.howtogeek.com/125157/8-deadly-commands-you-should-never-run-on-linux/

  8. ABAP ODATA接口开发

    1.SE37 创建好 Remote-Enabled函数. 2.SEGW,新建项目 创建项目之后,展开,右键Data Model,Import 函数. 导入函数之后,创建mapping 3./IWFND ...

  9. YTU 2851: 数字游戏

    2851: 数字游戏 时间限制: 1 Sec  内存限制: 128 MB 提交: 164  解决: 85 题目描述 输入若干个正整数,将其中能写成其它两个正整数的平方和的数输出来. 例,若输入的数中有 ...

  10. 浅谈Linux Kernel 中循环链表的实现

    前阵子在弄缓存的时候,我们需要将qemu对于磁盘镜像文件写请求串成一个链表,最终将这个链表里面的写请求全部刷回到镜像文件里面,那么我们便需要一个强健,可靠的链表的接口,于是我们仿照Linux 2.4. ...