java.lang.Object | |
↳ | android.net.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 callingContext.getSystemService(Context.CONNECTIVITY_SERVICE)
.
The primary responsibilities of this class are to:
- Monitor network connections (Wi-Fi, GPRS, UMTS, etc.)
- Send broadcast intents when network connectivity changes
- Attempt to "fail over" to another network when connectivity to a network is lost
- Provide an API that allows applications to query the coarse-grained or fine-grained state of the available networks.
- 监视网络连接(WIFI,GPRS,UMTS等)
- 当网络变化时发出broadcast.
- 当目前的网络丢失的时候尝试转移到另一个网络
- 提供API来允许AP查询当前可用网络的精确度
NetworkInfo | getActiveNetworkInfo() |
NetworkInfo[] | getAllNetworkInfo() |
boolean |
getBackgroundDataSetting()
This method is deprecated. As of ICE_CREAM_SANDWICH , availability of background data depends on several combined factors, and this method will always returntrue . Instead, when background data is unavailable, getActiveNetworkInfo() will now appear disconnected.
|
NetworkInfo | getNetworkInfo(int networkType) |
int | getNetworkPreference() |
static boolean | isNetworkTypeValid(int networkType) |
boolean |
requestRouteToHost(int networkType, int hostAddress)
Ensure that a network route exists to deliver traffic to the specified host via the specified network interface.
|
void | setNetworkPreference(int preference) |
int |
startUsingNetworkFeature(int networkType,
String feature)
Tells the underlying networking system that the caller wants to begin using the named feature.
|
int |
stopUsingNetworkFeature(int networkType,
String feature)
Tells the underlying networking system that the caller is finished using the named feature.
|
java.lang.Object | |
↳ | android.net.NetworkInfo |
Describes the status of a network interface of a given type (currently either Mobile or Wifi).
描述目前网络的状态()
Detailed state | Coarse-grained state |
IDLE | DISCONNECTED |
SCANNING | CONNECTING |
CONNECTING | CONNECTING |
AUTHENTICATING | CONNECTING |
CONNECTED | |
DISCONNECTING | DISCONNECTING |
DISCONNECTED | DISCONNECTED |
UNAVAILABLE | DISCONNECTED |
FAILED | DISCONNECTED |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
NetworkInfo.DetailedState |
getDetailedState()
Reports the current fine-grained state of the network.
| ||||||||||
String |
getExtraInfo()
Report the extra information about the network state, if any was provided by the lower networking layers., if one is available.
| ||||||||||
String |
getReason()
Report the reason an attempt to establish connectivity failed, if one is available.
| ||||||||||
NetworkInfo.State |
getState()
Reports the current coarse-grained state of the network.
| ||||||||||
int |
getSubtype()
Return a network-type-specific integer describing the subtype of the network.
| ||||||||||
String |
getSubtypeName()
Return a human-readable name describing the subtype of the network.
| ||||||||||
int |
getType()
Reports the type of network (currently mobile or Wi-Fi) to which the info in this object pertains.
| ||||||||||
String |
getTypeName()
Return a human-readable name describe the type of the network, for example "WIFI" or "MOBILE".
| ||||||||||
boolean |
isAvailable()
Indicates whether network connectivity is possible.
| ||||||||||
boolean |
isConnected()
Indicates whether network connectivity exists and it is possible to establish connections and pass data.
| ||||||||||
boolean |
isConnectedOrConnecting()
Indicates whether network connectivity exists or is in the process of being established.
| ||||||||||
boolean |
isFailover()
Indicates whether the current attempt to connect to the network resulted from the ConnectivityManager trying to fail over to this network following a disconnect from another network.
| ||||||||||
boolean |
isRoaming()
Indicates whether the device is currently roaming on this network.
| ||||||||||
String |
toString()
Returns a string containing a concise, human-readable description of this object.
|
一个用上面两个类实现的查询当前网络状态是否可用的工具类:
- public static boolean isNetworkAvailable(Context context)
- {
- ConnectivityManager mConnMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo mWifi = mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
- NetworkInfo mMobile = mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
- boolean flag = false;
- if((mWifi != null) && ((mWifi.isAvailable()) || (mMobile.isAvailable())))
- {
- if((mWifi.isConnected()) || (mMobile.isConnected()))
- {
- flag = true;
- }
- }
- return flag;
- }
上面这个类实现了单独查询WiFi与Mobile的移动网络是否可用,可以看到就是使用了ConnectivityManager与NetworkInfo提供的接口实现的功能!
- public static boolean isConnectionAvailable(Context cotext)
- {
- boolean isConnectionFail = true;
- ConnectivityManager connectivityManager = (ConnectivityManager)cotext.getSystemService(Context.CONNECTIVITY_SERVICE);
- if (connectivityManager != null)
- {
- NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
- if (activeNetworkInfo == null || !activeNetworkInfo.isConnected())
- {
- isConnectionFail = true;
- }
- else
- {
- isConnectionFail = false;
- }
- }
- else
- {
- Log.e(TAG, "Can't get connectivitManager");
- }
- return isConnectionFail;
- }
如果拟开发一个网络应用的程序,首先考虑是否接入网络,在Android手机中判断是否联网可以通过ConnectivityManager 类的isAvailable()方法判断,首先获取网络通讯类的实例 ConnectivityManager cwjManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); ,使用cwjManager.getActiveNetworkInfo().isAvailable(); 来返回是否有效,如果为True则表示当前Android手机已经联网,可能是WiFi或GPRS、HSDPA等等,具体的可以通过ConnectivityManager 类的getActiveNetworkInfo() 方法判断详细的接入方式,需要注意的是有关调用需要加入<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 这个权限,android开发网提醒大家在真机上Market和Browser程序都使用了这个方法,来判断是否继续,同时在一些网络超时的时候也可以检查下网络连接是否存在,以免浪费手机上的电力资源
====================================================================================================================================
一、判断网络连接是否可用
public static boolean isNetworkAvailable(Context context) { ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (cm == null) { } else { //如果仅仅是用来判断网络连接 //则可以使用 cm.getActiveNetworkInfo().isAvailable(); NetworkInfo[] info = cm.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } } } return false; }
二、判断GPS是否打开
public static boolean isGpsEnabled(Context context) { LocationManager lm = ((LocationManager) context .getSystemService(Context.LOCATION_SERVICE)); List<String> accessibleProviders = lm.getProviders(true); return accessibleProviders != null && accessibleProviders.size() > 0; }
三、判断WIFI是否打开
public static boolean isWifiEnabled(Context context) { ConnectivityManager mgrConn = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); TelephonyManager mgrTel = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); return ((mgrConn.getActiveNetworkInfo() != null && mgrConn .getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED) || mgrTel .getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS); }
四、判断是否是3G网络
public static boolean is3rd(Context context) { ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkINfo = cm.getActiveNetworkInfo(); if (networkINfo != null && networkINfo.getType() == ConnectivityManager.TYPE_MOBILE) { return true; } return false; }
五、判断是wifi还是3g网络,用户的体现性在这里了,wifi就可以建议下载或者在线播放。
public static boolean isWifi(Context context) { ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkINfo = cm.getActiveNetworkInfo(); if (networkINfo != null && networkINfo.getType() == ConnectivityManager.TYPE_WIFI) { return true; } return false; }