Android 网络访问

Android 类 : NetworkInfo

描述了当前网络 Mobile和Wifi的状态。

2个内部类 NetworkInfo.DetailedState(精确的网络状态) NetworInfo.State(粗略的网路状态)

NetworkInfo.DetailedState 枚举值有:

IDLE : 准备好开始数据连接设置
SCANNING :寻找一个可用的访问点。
CONNECTING :当前设置数据连接
AUTHENTICATING :网络链路建立,执行身份验证
OBTAINING_IPADDR :等待响应从DHCP服务器为了分配IP地址信息。
CONNECTED :IP流量应该可用
SUSPENDED :IP流量悬浮
DISCONNECTING : 当前拆除数据连接
DISCONNECTED :  IP流量。
FAILED :尝试连接失败。
BLOCKED :访问这个网络阻塞。

NetworInfo.State 枚举有:

           CONNECTING

            CONNECTED

            SUSPENDED 

            DISCONNECTING 

            DISCONNECTED,

            UNKNOWN

isConnectedOrConnecting():显示网络连接是否存在或过程被建立。这是适合应用程序的需要做任何相关的网络读写数据。

isConnected():显示网络连接是否存在,可以建立连接和传递数据。

isAvailable():显示网络连接是否可能。网络不可用当一个持久或semi-persistent条件阻止了可能性网络的连接。例子包括设备的这种类型的网络的覆盖范围。设备在家庭网络(即以外的一个网络。、漫游)数据漫游已禁用。设备的无线电是关闭的。,因为飞机模式启用。

isFailover():表明当前是否试图连接到网络ConnectivityManager试图引起故障转移网络断开后另一个网络。

isRoaming():

显示当前设备是否在这个网络漫游。{ @code真正}时,表明使用该网络的数据*可能招致额外费用。

 ConnectivityManager connectMgr = (ConnectivityManager) this
        .getSystemService(Context.CONNECTIVITY_SERVICE);
 
 NetworkInfo info = connectMgr.getActiveNetworkInfo();
 
一、判断网络是否是wifi,在判断之前一定要进行的非空判断,如果没有任何网络
连接info ==null
info.getType() == ConnectivityManager.TYPE_WIFI
 
二、判断是否是手机网络
info !=null && info.getType() ==  ConnectivityManager.TYPE_MOBILE
 
手机网络进行详细区分:
 
info.getSubtype() 这里使用 getSubtype(),不是 getType(),getType()返回的
是0,或者1,是区分是手机网络还是wifi
 
info.getSubtype()取值列表如下:
 
         * NETWORK_TYPE_CDMA 网络类型为CDMA
         * NETWORK_TYPE_EDGE 网络类型为EDGE
         * NETWORK_TYPE_EVDO_0 网络类型为EVDO0
         * NETWORK_TYPE_EVDO_A 网络类型为EVDOA
         * NETWORK_TYPE_GPRS 网络类型为GPRS
         * NETWORK_TYPE_HSDPA 网络类型为HSDPA
         * NETWORK_TYPE_HSPA 网络类型为HSPA
         * NETWORK_TYPE_HSUPA 网络类型为HSUPA
         * NETWORK_TYPE_UMTS 网络类型为UMTS
 
联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EDGE,电信的2G为CDMA,电信的3G为EVDO
 getExtraInfo():报告额外的网络状态信息,如果有的话提供的较低的网络层。如果一个是可用的。
原文地址:https://www.cnblogs.com/houxin/p/3713266.html