在android平台中ConnectivityManager主要负责查询网络连接状态以及在连接状态有变化的时候发出通知。其主要的功能职责如下:

1、  监视网络状态,包括(Wi-Fi、GPRS、UMTS等)

2、  当网络状态发生变化时发送广播通知

3、  当网络连接失败后会尝试连接其他网络

4、  为App提供API,用于获取网络状态信息等

  该类中提供了一些常量,比如广播Action、网络类型等等,具体如下:

  公共的方法有:

  在上述方法中,常用的有getActivieNetworkInfo、getAllNetworkInfo、getNetworkInfo(int networkType)等,这些方法返回NetworkInfo,该类用于描述网络的状态(mobile和wifi)。

  在NetworkInfo中定义了两个内部类,用于枚举网络的状态,两个内部类分别为NetworkInfo.DetailedState,精确的网络状态;NetworkInfo.State,粗略的网络状态。

  NetworkInfo.DetailedState的枚举值:

  NetworkInfo.State的枚举值:

二者之间的对应关系:

  在NetworkInfo中除了两个内部类外,还提供了一些方法,如

1、  getDetailedState():返回当前精确的网络状态。

2、  getState():返回当前粗略的网络状态。

3、  getType():返回当前的网络类型(mobile或者wi-fi)

4、  getTypeName():返回当前网络类型的名称。如“WIFI”或者“MOBILE”

5、  isAvailable():判断网络是否有效可用。

6、  isConnected():判断网络是否已连接。

  下面,我们通过一个案例来展示ConnectityManager的具体用法。核心代码如下:

public void getNetworkState(View v){
//获取
ConnectivityManager connectivityManager=
(ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE); NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
StringBuilder sb = new StringBuilder();
sb.append("TypeName:").append(networkInfo.getTypeName()).append("\n");
sb.append("Type:").append(networkInfo.getType()).append("\n");
sb.append("isAvailable:").append(networkInfo.isAvailable()).append("\n");
sb.append("isConnected:").append(networkInfo.isConnected()).append("\n");
NetworkInfo.DetailedState state= networkInfo.getDetailedState();
String detailedState="";
if(state== NetworkInfo.DetailedState.AUTHENTICATING){
detailedState="AUTHENTICATING";
}else if(state== NetworkInfo.DetailedState.BLOCKED){
detailedState="BLOCKED";
}else if(state== NetworkInfo.DetailedState.CONNECTED){
detailedState="CONNECTED";
}else if(state== NetworkInfo.DetailedState.CONNECTING){
detailedState="CONNECTING";
}else if(state== NetworkInfo.DetailedState.DISCONNECTED){
detailedState="DISCONNECTED";
}else if(state== NetworkInfo.DetailedState.DISCONNECTING){
detailedState="DISCONNECTING";
}else if(state== NetworkInfo.DetailedState.FAILED){
detailedState="FAILED";
}else if(state== NetworkInfo.DetailedState.IDLE){
detailedState="IDLE";
}else if(state== NetworkInfo.DetailedState.SCANNING){
detailedState="SCANNING";
}else if(state== NetworkInfo.DetailedState.OBTAINING_IPADDR){
detailedState="OBTAINING_IPADDR";
}else if(state== NetworkInfo.DetailedState.SUSPENDED){
detailedState="SUSPENDED";
}
sb.append("DetailedState:").append(detailedState).append("\n");
showState.setText(sb.toString());
} /**
* 获取搜有网络
* @param v
*/
public void getNetwork(View v){
ConnectivityManager connectivityManager=
(ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
StringBuilder stringBuilder = new StringBuilder();
NetworkInfo[] networkInfos= connectivityManager.getAllNetworkInfo();
for(NetworkInfo info:networkInfos){
stringBuilder.append("Name:").append(info.getTypeName())
.append(";isAvailable:").append(info.isAvailable()).append("\n");
} showNetwork.setText(stringBuilder.toString());
} private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")){
ConnectivityManager connectivityManager=
(ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo info= connectivityManager.getActiveNetworkInfo();
if(info!=null){
if(info.getState()== NetworkInfo.State.CONNECTED){
showChange.setText("网络变化:网络已连接!");
}else{
showChange.setText("网络变化:网络已断开!");
}
}else{
showChange.setText("网络变化:无网络!");
}
}
}
};

  案例效果如下:

注意,以上代码需要使用的如下权限:

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

Android之ConnectivityManager的更多相关文章

  1. android ConnectivityManager 检查是否有网络

    一.   ConnectivityManager 概要 ConnectivityManager是网络连接相关的管理器,它主要用于查询网络状态并在网络发生改变时发出状态变化通知.这个类主要负责的下列四个 ...

  2. Android测试网络是否连接

    一.布局页面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  3. Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)

    写在最前: 在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流. 新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ? 好了 ...

  4. Android 系统工具类SystemUtils

    包含的功能有: 获取系统中所有APP应用.获取用户安装的APP应用.根据包名和Activity启动类查询应用信息.跳转到WIFI设置.WIFI网络开关.移动网络开关.GPS开关 当前若关则打开 当前若 ...

  5. Android 网络状态检测

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

  6. Android 异步任务,通过PHP访问数据库,多线程,线程间通讯

    文章列表MainActivity.java package com.eric.asynctask; import java.io.IOException; import java.util.Array ...

  7. android——判断网络状态

    平常我们玩qq的时候我们没联网 ,qq上面回显示"网络连接不给力,请检查网络连接"那么它是 通过什么方式判断网络是否连接的呢? 下面将写个案例展示如何检查网络连接状态的 由于我们这 ...

  8. 在Android开发中如何判读当前设备是否连接网络

    1:前言: 我们在Android开发的过程中,很多实现是要向远程服务器拿数据的,但是未必当前设备一定连接了网络啊,那么此时我们就是要进行判断的了, 如果是有网络的话,那么此时就去向远程服务器去拿数据, ...

  9. Android入门(八)广播

    原文链接:http://www.orlion.ga/572/ 一.广播机制 Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广 播可能是 ...

随机推荐

  1. python2.7

    python2.7支持win32.win64 下载地址:http://pan.baidu.com/s/1dE39eQ9 初学,附一个牛人的python教程地址:http://www.liaoxuefe ...

  2. MIT6.006Lec01:Python实现

    MIT6.006是Algo Intro这门课,据说语言使用python Lec01是讲peak finding,也就是峰值点 具体为: 一维情况下一个数组中a[i]>a[i-1]且a[i]> ...

  3. Android 客户端 okhttp3 与服务器之间的双向验证

    [原文]https://blog.csdn.net/leng_wen_rou/article/details/58596142 本篇是Android 客户端基于okhttp3的网络框架 和后台服务器之 ...

  4. HDU - 5136 2014icpc南京现场赛J 计数dp

    题目大意:给你一个树的直径k,要求每个点的度数不超过3, 问你有多少棵树满足条件. 思路:好难啊. 主要思想就是将一棵无根二叉树树划分成有根二叉树. 我们对k的分奇偶讨论: 我们定义dp[ i ] 为 ...

  5. CentOS 7.2 下 PXE+kickstart 自动安装系统

    一.简单概述 1.1 Kickstart 概述 对于网络安装系统,在linux 下面最熟悉的应该就是 Kickstart 以及 cobbler.写这篇文章的目的在于我公司目前使用的就是 Kicksta ...

  6. 009 HDFS的shell命令(里面有一个安全模式)

    一:dfs的命令 1.所有的领命 2.解释 -appendToFile <localsrc> ... <dst>   :追加文件 -checksum <src> . ...

  7. Ionic Js八:头部和底部

    1.ion-header-bar 这个是固定在屏幕顶部的一个头部标题栏.如果给它加上'bar-subheader' 这个样式,它就是副标题. <ion-header-bar align-titl ...

  8. java 将class打包成jar包

    一.进入到java jdk安装目录(用cmd命令进入) c:cd C:\Program Files\Java\jdk1.8.0_45\bin 二.运行打包命令(将D盘下com中的class 打包成xy ...

  9. react篇章-React Props

    state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变.这就是为什么有些容器组件需要定义 state 来更新和修改数据. 而子组件只能通过 pro ...

  10. MySQL Insert语句单个批次数量过多导致的CPU性能问题分析

    [问题] 最近有台服务器比较频繁的CPU报警,表现的特征有CPU sys占比偏高,大量慢查询,大量并发线程堆积.后面开发对insert的相关业务限流后,服务器性能恢复正常. [异常期间线程处理情况] ...