1.注册一个广播接收器,监听网络状态
private void Start()
{
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
this.registerReceiver(myBroadcastReceiver, filter);
}

2.取消注册广播器
private void Stop()
{
this.unregisterReceiver(myBroadcastReceiver);
}

3.新建监听类NetworkConnectChangedReceiver继承BroadcastReceiver

public class NetworkConnectChangedReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// 这个监听wifi的打开与关闭,与wifi的连接无关
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction()))
{
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
switch (wifiState)
{
case WifiManager.WIFI_STATE_ENABLED:
Log.e("APActivity", "WIFI_STATE_ENABLED");
break;
case WifiManager.WIFI_STATE_ENABLING:
Log.e("APActivity", "WIFI_STATE_ENABLING");
break;
case WifiManager.WIFI_STATE_DISABLED:
Log.e("APActivity", "WIFI_STATE_DISABLED");
break;
case WifiManager.WIFI_STATE_DISABLING:
Log.e("APActivity", "WIFI_STATE_DISABLING");
break;
}
}
// 这个监听wifi的连接状态即是否连上了一个有效无线路由,当上边广播的状态是WifiManager.WIFI_STATE_DISABLING,和WIFI_STATE_DISABLED的时候,根本不会接到这个广播。
// 在上边广播接到广播是WifiManager.WIFI_STATE_ENABLED状态的同时也会接到这个广播,当然刚打开wifi肯定还没有连接到有效的无线
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction()))
{
Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (null != parcelableExtra)
{
NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;
switch (networkInfo.getState())
{
case CONNECTED:
Log.e("APActivity", "CONNECTED");
break;
case CONNECTING:
Log.e("APActivity", "CONNECTING");
break;
case DISCONNECTED:
Log.e("APActivity", "DISCONNECTED");
break;
case DISCONNECTING:
Log.e("APActivity", "DISCONNECTING");
break;
case SUSPENDED:
Log.e("APActivity", "SUSPENDED");
break;
case UNKNOWN:
Log.e("APActivity", "UNKNOWN");
break;
default:
break;
}
}
}
// 这个监听网络连接的设置,包括wifi和移动数据的打开和关闭。
// 最好用的还是这个监听。wifi如果打开,关闭,以及连接上可用的连接都会接到监听。见log
// 这个广播的最大弊端是比上边两个广播的反应要慢,如果只是要监听wifi,我觉得还是用上边两个配合比较合适
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()))
{
NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (info != null)
{
StringBuilder sb = new StringBuilder();
sb.append("info.getTypeName() : " + info.getTypeName() + "\n");
sb.append("getSubtypeName() : " + info.getSubtypeName() + "\n");
sb.append("getState() : " + info.getState() + "\n");
sb.append("getDetailedState() : " + info.getDetailedState().name() + "\n");
sb.append("getDetailedState() : " + info.getExtraInfo() + "\n");
sb.append("getType() : " + info.getType());
Log.e("APActivity", sb.toString());
}
}
}
}

当网络连接接通的时候,是用的是Wifi或者3G网络。利用本文所述,可以实现记录何时使用的是Wifi,何时使用的是3G网络。

public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
NetworkInfo ni = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (ni.getState() == State.CONNECTED && ni.getType() == ConnectivityManager.TYPE_WIFI) {
Log.v("kevin", "wifi connected");
} else if(ni.getState() == State.DISCONNECTED && ni.getType() == ConnectivityManager.TYPE_WIFI){
Log.v("kevin", "wifi disconnected");
}
}
}
}

android-监听网络状态的更多相关文章

  1. Android实时监听网络状态(2)

    在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒.一般可以通过ConnectivityManager来完成该工作. ConnectivityMana ...

  2. Android实时监听网络状态

    Android实时监听网络状态(1)   其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ...

  3. (原创)用Receiver和SystemService监听网络状态,注册Receiver的两种方式

    android中网络编程不可避免地要监听网络状态,wifi或者3G以及以太网,并根据当前状态做出相应决策. 在MyReceiver类中的onReceive方法中获得系统服务 ConnectivityM ...

  4. IOS-利用AFNetworking监听网络状态

    网络环境检测:检测用户当前所处的网络状态 效果图 1.当蜂窝和wifi同时关闭时候  显示为不可达(AFNetworkReachabilityStatusNotReachable)状态 2.打开蜂窝移 ...

  5. Android 监听网络变化

    Android 监听网络变化

  6. IOS-网络(监听网络状态)

    // // BWNetWorkTool.h // IOS_0131_检测网络状态 // // Created by ma c on 16/1/31. // Copyright © 2016年 博文科技 ...

  7. Android监听电池状态

    监听电池状态只需要接收Intent.ACTION_BATTERY_CHANGED的广播即可,当电池状态发生变化时会发出广播. 1.运行状态如下图: (1)连接USB时的状态 (2)断开USB时的状态 ...

  8. Android实时监听网络状态(1)

    其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就可以实现网络的监听. 1.添加访问网络和获 ...

  9. 用BroadcastReceiver监听网络状态的变化

    在用户浏览网络信息时,如果网络突然断开,可以及时的提醒用户网络已断开.要实现这个功能,我们可以实现一个广播接收者来接收网络状态改变的广播,当由连接状态变为断开状态时,系统会发送一条广播,广播接收者接收 ...

  10. Android开发之使用广播监听网络状态变化

    我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示.如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听. ...

随机推荐

  1. U盘无法拷贝超过4G的大文件

    现在U盘的容量越来越大了,8G闪存满天飞,几乎已成“标配”,市面上再见难觅64M.128M等U盘的踪迹,可是细心的你也许已经发现,即使是8G或更大体积的U盘,仍然不能拷贝存储体积超过4G的大文件,这是 ...

  2. 断言--NSAssert

    NSAssert()是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异常,并切可以自定义异常 ...

  3. 安装office2013时弹出microsoft setup bootstrapper已停止工作,接着就不能安装了

    只是说一下自己的解决方法: 我的原因是注册表没有删除改进. 1.输入regedit 2.找到HKEY_LOCAL_MACHINE\software\microsoft\windows\CurrentV ...

  4. Linux命令之type

    1:linux命令可以分为很多类,其中常见得类型: (1):builtin --内置命令 (2):alias --命令别名 (3):file --外部命令 具体有哪些内置命令以及内置命令各个用法: [ ...

  5. 著名的二分查找的BUG

    int binarySearch(int a[], int key, int length) { int low = 0; int high = length - 1; while (low < ...

  6. Openvz特点和分析

    OpenVZ是开源软件,是基于Linux平台的操作系统级服务器虚拟化解决方案.OpenVZ采用SWsoft的Virutozzo虚拟化服务器软件产品的内核,Virutozzo是SWsoft公司提供的商业 ...

  7. BochsDebug

    Bochs User Manual   Chapter 8. Tips and Techniques   8.12. Using Bochs internal debugger Note, if yo ...

  8. Win2003打不开https的问题

    碰到客户做问题是能打开https://www.baidu.com 这个网页 打不开 https://sha256.alipay.com/SHA256/index.htm支付宝这个网页      解决办 ...

  9. Lua 练习中的Bug 以及日志

    使用 Lua 中的table.getn获得数组的table的长度:运行失败-- > t ={1,2,3 } > print(table.getn(t)) stdin:1: attempt ...

  10. 安装elasticsearch

    安装elasticsearch   来自:http://www.cnblogs.com/huangfox/p/3541300.html 一)安装elasticsearch 1)下载elasticsea ...