AndroidManager 学习系列之ConnectivityManager

          转载请注明出处 :http://blog.csdn.net/xiaocaoxiekun

       今天给大家介绍的是Android Manager中的网络设置管理器ConnectivityManager。顾名思义ConnectivityManager就是用来对对移动设备的网络连接情况尽情管理。这个听起来感觉很难,因为随着移动设备和网络环境的发展,网络类型和网络共享类型越来越复杂,比如说WIFI,蓝牙共享,2G,3G和已经进入大众生活的4G网络等等,但是android通过ConnectivityManager对网络管理进行了很好的封装,我们可以借助这个管理器对手机中的网络情况进行管理和网络信息的获取。       

首先看一个案例:

<pre class="java" name="code">protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		TextView myText=(TextView)findViewById(R.id.phoneListView);
		
		//得到ConnectivityManager对象
		ConnectivityManager cm =
	       (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
		
		//得到当前处于活动状态的网络信息
		NetworkInfo nowNetInfo=cm.getActiveNetworkInfo();
		String nowNetWorkName=nowNetInfo.getTypeName(); //WIFI,mobile,
		
		//得到该设备支持的网络类型信息,返回网络类型信息数组
		NetworkInfo[] supportedNetwork=cm.getAllNetworkInfo();
		String supportNetworkNames="";
		for(NetworkInfo tempNetwork:supportedNetwork){
			supportNetworkNames+=tempNetwork.getTypeName()+",";
		}
		
		//得到当前首选网络类型
		int preferentNet=cm.getNetworkPreference() ;
		
		//得到当前网络是不是需要统计数据流程  (isMetered?"TRUE":"false")
		//Boolean isMetered=cm.isActiveNetworkMetered() ;	
		
		myText.setText("当前活动网络类型:"+nowNetWorkName+"->;该手机支持的网络类型:"+supportNetworkNames+"\n"+
				
				"->首选网络类型为:"+preferentNet);
        
        
	}

 

 

1.1 移动设备上的网络类型简介

       对于一个移动设备而言,想要发挥它真正的功能和便利性,网络的应用当然必不可少,随着移动设备的发展,移动设备可用的网络类型当然也多来越多,也越来月高级,下面我们就先讲一下手机中常使用到的网络以及其共享类型

 

网络类型

网络类型描述

TYPE_BLUETOOTH

通过配对的蓝牙来实现网络共享形式(android4.0

TYPE_MOBILE

通过手机SIM卡实现网络连接,具体的网络类型需另外判断

TYPE_MOBILE_DUN

采用Bluetooth无线技术接入 Internet和其它拨号服务的标准的形式上网

TYPE_WIFI

通过WIFI的形式实现网络连接

TYPE_WIMAX

全球微波互联接入形式的网络连接

 

1.2 网络信息的描述

         和所有的Manager一样,对connecticity进行管理,实际就是对网络信息的管理,在这个过程中我们接触到的当然最多的就是网络信息对象,本节我们将对网络信息进行详细的描述:

1.2.1 网络信息状态的描述——NetworkInfo子类简介  

NetworkInfo有2个内部子类,分别是NetworkInfo.DetailedState和NetworkInfo.State,分别枚举出网络的颗粒度状态和基本的网络状态。

NetworkInfo.DetailedState主要用来描述网络连接的细粒度的状态。这种细颗粒度的状态对于一般的应用程序而言很少用到,这里就做一下简单的介绍:

 

属性名称

状态描述

AUTHENTICATING

当前网络连接正处于身份验证状态

BLOCKED

访问网络的时候被封锁,比如验证失败

CAPTIVE_PORTAL_CHECK

检查网络是不是强制网络门户,即在访问该网络前必须以Web页面的形式进行交互达到权限授予,如:CMCC公用网络

CONNECTED

网络已经连接,ip流量可用,即已经分配ip地址

CONNECTING

正处于数据连接状态

DISCONNECTED

处于ip流量不可用状态

DISCONNECTING

正处于数据连接断开状态

FAILED

尝试连接失败,比如尝试连接Wifi 失败的状态

IDLE

准备开始数据连接设置

SUSPENDED

数据连接被创建了,但是有些连接不可用

OBTAINING_IPADDR

ip地址已经分配,等待DHCP服务器响应

SCANNING

正在搜索可用网络

 

NetworkInfo.Stat主要用来描述网络连接的基本状态。在开发者开发自己的APP的时候,经常会用到的这个网络状态,并不是NetworkInfo.DetailedState:

NetworkInfo.Stat常见的字段如下图所示:

属性名称

状态描述

DISCONNECTED

当前网络处于断开不可用状态

CONNECTING

当前网络处于正在连接状态

CONNECTED

当前网络已经连接成功,可进行数据流量操作

DISCONNECTING

当前网络处于正在断开状态

 

提示:NetworkInfo.Stat 中的网络状态和 NetworkInfo.DetailedState网络状态其实是可以对应起来的,按照从开始连接网络到断开网络连接对应关系为:

CONNECTING ->>SCANNING, CONNECTING,AUTHENTICATING

CONNECTED ->> CONNECTED

DISCONNECTING->>DISCONNECTING

DISCONNECTED ->>DISCONNECTED,FAILED,IDLE

 

1.2.2网络信息核心——NetworkInfo

NetworkInfo类是Android描述网络信息的核心类,使用这个类我们可以得到某个具体类型网络的详细信息。下表中列出了NetworkInfo中常用的方法:

 

方法名称

说明

getDetailedState()

得到网络的细粒度状态 DetailedState对象

getState()

得到网络的基本状态 State对象

getType()

得到网络对应的网络类型(参见1.1中的表格),返回为int类型

getTypeName()

得到网络对应的网络类型的描述,比如“WIFI“,返回为String

isAvailable()

得到当前网络的可用性,可用则返回True

isConnected()

当前网络是不是已经连接成功,可以使用数据流量

isRoaming()

当前设备是不是正在漫游该网络

isFailover()

当前网络是不是存在一些问题

getSubtype()

得到特定网络类型,比如TYPE_MOBILE类型下面的特定描述,2G,3G等特定的描述,返回为int

getSubtypeName()

得到特定网络类型的描述,比如TYPE_MOBILE类型下面的特定描述,2G,3G等特定的描述,返回为String

 

1.3 网络信息管理——ConnectivityManager

    讲完了Android 中的网络基本信息和网络状态信息,接下来我们就要讲一讲这些信息在Android中是如何被调用和管理的了,这就是下面我们要讲到的Android的ConnectivityManager

      Android的ConnectivityManager主要有以下功能

1.     监视网络(WIFI,MOBILE DATA…..)连接状态

2.     当网络连接发生变化的时候对外界发出广播

3.     当一个网络连接失败的时候,视图去连接另外一个网络,比如说连接一个wifi失败,手机会自动尝试连接另一个可用网络

4.     提供了用于查询可用网络的具体状态的API

在Android中ConnectivityManager的实例化和Android中的大多数Manager一致,都是以SystemService的形式来获取:具体的方法为:Context.getSystemService(Context.CONNECTIVITY_SERVICE).

 

1.3 实例讲解ConnectivityManager常用方法

 首先在AndroidManifest.xml 中添加访问网络的权限:

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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值