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中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广 播可能是 ...
随机推荐
- Effective STL 笔记 -- Item 9: Choose carefully among erasing options
假设有一个容器中存放着 int ,Container<int> c, 现在想从其中删除数值 1963,可以有如下方法: 1: c.erase(remove(c.begin(), c.end ...
- CentOs 安装 swftools
一 下载安装包 #wget http://www.swftools.org/swftools-0.9.1.tar.gz 二 安装相关依赖库 #yum install gcc* automake zli ...
- java 基础类库之 SQLFun
package com.exjor.webdemo; import java.sql.Timestamp; import java.util.Date; public class SQLFun { / ...
- pyqt5猜数小程序
程序界面用qt设计师制作,并用pyuic5命令转换成form.py文件 #-*- coding:utf-8 -*- from PyQt5.QtWidgets import QApplication,Q ...
- python中list和str互转
1.list转str 假设有一个名为test_list的list,转换后的str名为test_str 则转换方法: test_str = "".join(test_list) 例子 ...
- servlet文件下载实例剖析
package mypack; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; ...
- 最详细的vue-cli安装教程 &^没有之一 ^& 大神亲测。。╮( ̄▽  ̄)╭
这里介绍使用git安装,电脑自带命令行依然可以使用进行安装 第一步 node环境安装 1.1 如果本机没有安装node运行环境,请下载node 安装包进行安装 1.2 如果本机已经安装node的运行换 ...
- 面向对象设计原则 开放封闭原则(Open Closed Principle)
开放封闭原则(OCP,Open Closed Principle) 开放封闭原则是所有面向对象原则的核心. 软件设计本身所追求的目标就是封装变化.降低耦合,而开放封闭原则正是对这一目标的最直接体现. ...
- weighttp 使用
Weighttp 地址 http://redmine.lighttpd.net/projects/weighttp/wiki Weighttp的介绍:weighttp is a lightweigh ...
- [ZHOJ1956]vfk的地雷
题目大意: 有$n$个开关,$r$句话. 每个开关$i$有$p_i$的概率被触发,并造成$d_i$的代价. 每个开关至多被触发一次,一句话至多触发一个开关. 每个开关按照顺序被尝试触发. 求期望代价. ...