ConnectivityManager源码分析
来源:互联网 发布:windows管道通信 编辑:程序博客网 时间:2024/05/01 09:38
先来看一下关于ConnectivityManager类的介绍。
/** * Class that answers queries about the state of network connectivity. It also * notifies applications when network connectivity changes. Get an instance * of this class by calling * {@link android.content.Context#getSystemService(String) Context.getSystemService(Context.CONNECTIVITY_SERVICE)}. * <p> * The primary responsibilities of this class are to: * <ol> * <li>Monitor network connections (Wi-Fi, GPRS, UMTS, etc.)</li> * <li>Send broadcast intents when network connectivity changes</li> * <li>Attempt to "fail over" to another network when connectivity to a network * is lost</li> * <li>Provide an API that allows applications to query the coarse-grained or fine-grained * state of the available networks</li> * </ol> */从上面的介绍中总结出该类的作用:
1.追踪网络的连接状态:WI-Fi,GPRS,UMTS,etc;
2.当网络状态发生改变时,发送广播sendBroadcast消息;
3.失效转移file over:当A网络断掉时,系统自动切换,B网络及时补上提供服务,用户不会察觉网络的改变;
4.提供查询的API:(我们一般使用两种:)连没连网络和连的是什么类型的网络(getNetworkInfo(network_type))。
我们在需要监控网络状态时要注册广播接收器,BroadcastReceiver Action是:
public static final String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";看下注释
/** * A change in network connectivity has occurred. A connection has either * been established or lost. The NetworkInfo for the affected network is * sent as an extra; it should be consulted to see what kind of * connectivity event occurred. * <p/> * If this is a connection that was the result of failing over from a * disconnected network, then the FAILOVER_CONNECTION boolean extra is * set to true. * <p/> * For a loss of connectivity, if the connectivity manager is attempting * to connect (or has already connected) to another network, the * NetworkInfo for the new network is also passed as an extra. This lets * any receivers of the broadcast know that they should not necessarily * tell the user that no data traffic will be possible. Instead, the * receiver should expect another broadcast soon, indicating either that * the failover attempt succeeded (and so there is still overall data * connectivity), or that the failover attempt failed, meaning that all * connectivity has been lost. * <p/> * For a disconnect event, the boolean extra EXTRA_NO_CONNECTIVITY * is set to {@code true} if there are no connected networks at all. */从上面我们可以得到系统网络状态广播的情况:
1.网络的连接与断开
2.失效转移file over,其对应的标志FAILOVER_CONNECTION=true}
当无网络时,EXTRA_NO_CONNECTIVITY=true。
我们在查询网络状态时经常要区分出网络的类型:
public static final int TYPE_NONE = -1; public static final int TYPE_MOBILE = 0; //基本通话用的网络,譬如3G,GPRS public static final int TYPE_WIFI = 1; public static final int TYPE_MOBILE_MMS = 2; //彩信网络 public static final int TYPE_MOBILE_SUPL = 3; //是一种基于标准、允许移动电话用户与定位服务器通信的协议 public static final int TYPE_MOBILE_DUN = 4; //网络桥接,很老的一个网络 public static final int TYPE_MOBILE_HIPRI = 5; //高优先级的移动数据连接。相同的为{TYPE_MOBILE},但路由的设置是不同的。只有请求的进程将有机会获得移动的DNS服务器。 public static final int TYPE_WIMAX = 6; //全球微波互联接入 public static final int TYPE_BLUETOOTH = 7; //蓝牙 public static final int TYPE_DUMMY = 8; //虚拟连接 public static final int TYPE_ETHERNET = 9; //以太网 public static final int TYPE_MOBILE_FOTA = 10; public static final int TYPE_MOBILE_IMS = 11; public static final int TYPE_MOBILE_CBS = 12; public static final int TYPE_WIFI_P2P = 13; //通过wifi直连wifi public static final int TYPE_MOBILE_IA = 14;TYPE_MOBILE_MMS,TYPE_MOBILE_SUPL,TYPE_MOBILE_DUN,TYPE_MOBILE_HIPRI,TYPE_MOBILE_FOTA,TYPE_MOBILE_IMS,TYPE_MOBILE_CBS,TYPE_MOBILE_A是属于MOBILE类型的。
TYPE_WIFI,case TYPE_WIFI_P2P是属于WIFI类型的。
我们在使用getNetworkInfo(networkType)来获得指定网络类型的状态信息。
public NetworkInfo getNetworkInfo(int networkType) {
try {
return mService.getNetworkInfo(networkType);
} catch (RemoteException e) {
return null;
}
}
返回值类型NetworkInfo中可以通过getType()获得的网络类型,可以通过getState()获得网络状态,状态值有下面几个:CONNECTING, CONNECTED, SUSPENDED,
DISCONNECTING, DISCONNECTED, UNKNOWN。
- ConnectivityManager源码分析
- ConnectivityManager
- ConnectivityManager
- ConnectivityManager
- ConnectivityManager
- ConnectivityManager
- ConnectivityManager
- ConnectivityManager
- Android Connectivity分析(1)- ConnectivityManager
- Android Connectivity分析(1)- ConnectivityManager
- Android Connectivity分析(1)- ConnectivityManager
- Android ConnectivityManager
- android ConnectivityManager
- ConnectivityManager详解
- ConnectivityManager用法
- 源码分析
- 源码分析
- 源码分析
- javascript之传智播客
- DOS系统下控制串口(1)
- linux调度器源码分析 - 初始化(二)
- Linux下字节对齐准则
- 不可滚动的ListView
- ConnectivityManager源码分析
- 黑马程序员--面向对象(Java)
- java网络编程基础夯实03-为什么不能直接通过IP访问网站
- 集合的表示及其运算
- opencv进行图像复原
- 回调函数
- socket阻塞与非阻塞,同步与异步、I/O模型
- [LeetCode] 031. Next Permutation (Medium) (C++/Python)
- LeetCode #189 Rotate Array