Android之ConnectivityManager
在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的更多相关文章
- android ConnectivityManager 检查是否有网络
一. ConnectivityManager 概要 ConnectivityManager是网络连接相关的管理器,它主要用于查询网络状态并在网络发生改变时发出状态变化通知.这个类主要负责的下列四个 ...
- Android测试网络是否连接
一.布局页面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
写在最前: 在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流. 新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ? 好了 ...
- Android 系统工具类SystemUtils
包含的功能有: 获取系统中所有APP应用.获取用户安装的APP应用.根据包名和Activity启动类查询应用信息.跳转到WIFI设置.WIFI网络开关.移动网络开关.GPS开关 当前若关则打开 当前若 ...
- Android 网络状态检测
package com.example.administrator.yunstore.net; import android.app.AlertDialog; import android.conte ...
- Android 异步任务,通过PHP访问数据库,多线程,线程间通讯
文章列表MainActivity.java package com.eric.asynctask; import java.io.IOException; import java.util.Array ...
- android——判断网络状态
平常我们玩qq的时候我们没联网 ,qq上面回显示"网络连接不给力,请检查网络连接"那么它是 通过什么方式判断网络是否连接的呢? 下面将写个案例展示如何检查网络连接状态的 由于我们这 ...
- 在Android开发中如何判读当前设备是否连接网络
1:前言: 我们在Android开发的过程中,很多实现是要向远程服务器拿数据的,但是未必当前设备一定连接了网络啊,那么此时我们就是要进行判断的了, 如果是有网络的话,那么此时就去向远程服务器去拿数据, ...
- Android入门(八)广播
原文链接:http://www.orlion.ga/572/ 一.广播机制 Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广 播可能是 ...
随机推荐
- python2.7
python2.7支持win32.win64 下载地址:http://pan.baidu.com/s/1dE39eQ9 初学,附一个牛人的python教程地址:http://www.liaoxuefe ...
- MIT6.006Lec01:Python实现
MIT6.006是Algo Intro这门课,据说语言使用python Lec01是讲peak finding,也就是峰值点 具体为: 一维情况下一个数组中a[i]>a[i-1]且a[i]> ...
- Android 客户端 okhttp3 与服务器之间的双向验证
[原文]https://blog.csdn.net/leng_wen_rou/article/details/58596142 本篇是Android 客户端基于okhttp3的网络框架 和后台服务器之 ...
- HDU - 5136 2014icpc南京现场赛J 计数dp
题目大意:给你一个树的直径k,要求每个点的度数不超过3, 问你有多少棵树满足条件. 思路:好难啊. 主要思想就是将一棵无根二叉树树划分成有根二叉树. 我们对k的分奇偶讨论: 我们定义dp[ i ] 为 ...
- CentOS 7.2 下 PXE+kickstart 自动安装系统
一.简单概述 1.1 Kickstart 概述 对于网络安装系统,在linux 下面最熟悉的应该就是 Kickstart 以及 cobbler.写这篇文章的目的在于我公司目前使用的就是 Kicksta ...
- 009 HDFS的shell命令(里面有一个安全模式)
一:dfs的命令 1.所有的领命 2.解释 -appendToFile <localsrc> ... <dst> :追加文件 -checksum <src> . ...
- Ionic Js八:头部和底部
1.ion-header-bar 这个是固定在屏幕顶部的一个头部标题栏.如果给它加上'bar-subheader' 这个样式,它就是副标题. <ion-header-bar align-titl ...
- java 将class打包成jar包
一.进入到java jdk安装目录(用cmd命令进入) c:cd C:\Program Files\Java\jdk1.8.0_45\bin 二.运行打包命令(将D盘下com中的class 打包成xy ...
- react篇章-React Props
state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变.这就是为什么有些容器组件需要定义 state 来更新和修改数据. 而子组件只能通过 pro ...
- MySQL Insert语句单个批次数量过多导致的CPU性能问题分析
[问题] 最近有台服务器比较频繁的CPU报警,表现的特征有CPU sys占比偏高,大量慢查询,大量并发线程堆积.后面开发对insert的相关业务限流后,服务器性能恢复正常. [异常期间线程处理情况] ...