(1)ConnectivityManager
在Android中,ConnectivityManager类代表网络连接服务,它被用来监控网络连接状态,配置失效重连,并控制网络天线等。获取Connectivity Manager实例的方法是使用getSystemService,并指定Context.CONNECTIVITY_SERVICE作为参数,代码片段如下:
[java]
String cserviceName = Context.CONNECTIVITY_SERVICE; ConnectivityManager cm = (ConnectivityManager) getSystemService(cserviceName); 要使用Connectivity Manager来读写网络状态时,需要在AndroidManifest.xml文件中加入如下的许可:
[html]
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>Connectivity Manager在较高层面提供了管理可用网络连接的接口,使用getActiveNetworkInfo和getNetworkInfo函数可以查询获取NetworkInfo对象,该对象包含了当前活动网络连接或者指定类型的不可用网络连接的详细信息。
1.1)设置首选网络
当任何认证的应用程序请求网络连接时,Android都会优先尝试使用首选网络连接。设置首选网络连接的函数是setNetworkPreference,代码片段如下:
[java]
cm.setNetworkPreference(ConnectivityManager.TYPE_WIFI);当首选网络连接不可用或者连接丢失时,Android将自动尝试使用第二优先连接类型。
1.2)监控网络连接
ConnectivityManager最常用的一个功能就是当网络连接状态改变时通知应用程序,这是通过应用程序实现自己的Broadcast Receiver来监听ConnectivityManager.CONNECTIVITY_ACTION类型的intent来实现的。这个intent提供了以下几种extra来进一步明确发生改变的网络状态:
1)ConnectivityManager.EXTRA_IS_FAILOVER:值为true说明当前的连接是首选网络失效重连后的连接;
2)ConnectivityManager.EXTRA_NO_CONNECTIVITY:值为true表示当前设备没有连接到网络;
3)ConnectivityManager.EXTRA_REASON:如果当前的广播代表网络失效,则这个值包含了连接失效的原因描述;
4)ConnectivityManager.EXTRA_NETWORK_INFO:返回NetworkInfo对象,包含了当前连接事件相关的网络详细信息;
5)ConnectivityManager.EXTRA_OTHER_NETWORK_INFO:在一个网络断开连接时,这个值返回NetworkInfo对象,包含了可能的网络失效重连的详细信息;