【Android】使用ConnectivityManager與NetworkInfo實現判斷當前網路環境是否可用

iteye_20954發表於2011-12-09
public class

ConnectivityManager

extendsObject
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:

  1. Monitor network connections (Wi-Fi, GPRS, UMTS, etc.)
  2. Send broadcast intents when network connectivity changes
  3. Attempt to "fail over" to another network when connectivity to a network is lost
  4. Provide an API that allows applications to query the coarse-grained or fine-grained state of the available networks.
  5. 監視網路連線(WIFI,GPRS,UMTS等)
  6. 當網路變化時發出broadcast.
  7. 當目前的網路丟失的時候嘗試轉移到另一個網路
  8. 提供API來允許AP查詢當前可用網路的精確度
<nobr><a href="http://developer.android.com/reference/android/net/NetworkInfo.html" style="color:rgb(0,102,153); text-decoration:none">NetworkInfo</a></nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#getActiveNetworkInfo()" style="color:rgb(0,102,153); text-decoration:none">getActiveNetworkInfo</a></span>()</nobr>
<nobr><a href="http://developer.android.com/reference/android/net/NetworkInfo.html" style="color:rgb(0,102,153); text-decoration:none">NetworkInfo[]</a></nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#getAllNetworkInfo()" style="color:rgb(0,102,153); text-decoration:none">getAllNetworkInfo</a></span>()</nobr>
<nobr>boolean</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#getBackgroundDataSetting()" style="color:rgb(0,102,153); text-decoration:none">getBackgroundDataSetting</a></span>()</nobr>
This method is deprecated. As ofICE_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.
<nobr><a href="http://developer.android.com/reference/android/net/NetworkInfo.html" style="color:rgb(0,102,153); text-decoration:none">NetworkInfo</a></nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#getNetworkInfo(int)" style="color:rgb(0,102,153); text-decoration:none">getNetworkInfo</a></span>(int networkType)</nobr>
<nobr>int</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#getNetworkPreference()" style="color:rgb(0,102,153); text-decoration:none">getNetworkPreference</a></span>()</nobr>
<nobr>static boolean</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#isNetworkTypeValid(int)" style="color:rgb(0,102,153); text-decoration:none">isNetworkTypeValid</a></span>(int networkType)</nobr>
<nobr>boolean</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#requestRouteToHost(int,%20int)" style="color:rgb(0,102,153); text-decoration:none">requestRouteToHost</a></span>(int networkType, int hostAddress)</nobr>
Ensure that a network route exists to deliver traffic to the specified host via the specified network interface.
<nobr>void</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#setNetworkPreference(int)" style="color:rgb(0,102,153); text-decoration:none">setNetworkPreference</a></span>(int preference)</nobr>
<nobr>int</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#startUsingNetworkFeature(int,%20java.lang.String)" style="color:rgb(0,102,153); text-decoration:none">startUsingNetworkFeature</a></span>(int networkType,<a href="http://developer.android.com/reference/java/lang/String.html" style="color:rgb(0,102,153); text-decoration:none">String</a>feature)</nobr>
Tells the underlying networking system that the caller wants to begin using the named feature.
<nobr>int</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#stopUsingNetworkFeature(int,%20java.lang.String)" style="color:rgb(0,102,153); text-decoration:none">stopUsingNetworkFeature</a></span>(int networkType,<a href="http://developer.android.com/reference/java/lang/String.html" style="color:rgb(0,102,153); text-decoration:none">String</a>feature)</nobr>
Tells the underlying networking system that the caller is finished using the named feature.

public class

NetworkInfo

extendsObject
implementsParcelable
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
<nobr><a href="http://developer.android.com/reference/android/net/NetworkInfo.DetailedState.html" style="color:rgb(0,102,153); text-decoration:none">NetworkInfo.DetailedState</a></nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#getDetailedState()" style="color:rgb(0,102,153); text-decoration:none">getDetailedState</a></span>()</nobr>
Reports the current fine-grained state of the network.
<nobr><a href="http://developer.android.com/reference/java/lang/String.html" style="color:rgb(0,102,153); text-decoration:none">String</a></nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#getExtraInfo()" style="color:rgb(0,102,153); text-decoration:none">getExtraInfo</a></span>()</nobr>
Report the extra information about the network state, if any was provided by the lower networking layers., if one is available.
<nobr><a href="http://developer.android.com/reference/java/lang/String.html" style="color:rgb(0,102,153); text-decoration:none">String</a></nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#getReason()" style="color:rgb(0,102,153); text-decoration:none">getReason</a></span>()</nobr>
Report the reason an attempt to establish connectivity failed, if one is available.
<nobr><a href="http://developer.android.com/reference/android/net/NetworkInfo.State.html" style="color:rgb(0,102,153); text-decoration:none">NetworkInfo.State</a></nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#getState()" style="color:rgb(0,102,153); text-decoration:none">getState</a></span>()</nobr>
Reports the current coarse-grained state of the network.
<nobr>int</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#getSubtype()" style="color:rgb(0,102,153); text-decoration:none">getSubtype</a></span>()</nobr>
Return a network-type-specific integer describing the subtype of the network.
<nobr><a href="http://developer.android.com/reference/java/lang/String.html" style="color:rgb(0,102,153); text-decoration:none">String</a></nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#getSubtypeName()" style="color:rgb(0,102,153); text-decoration:none">getSubtypeName</a></span>()</nobr>
Return a human-readable name describing the subtype of the network.
<nobr>int</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#getType()" style="color:rgb(0,102,153); text-decoration:none">getType</a></span>()</nobr>
Reports the type of network (currently mobile or Wi-Fi) to which the info in this object pertains.
<nobr><a href="http://developer.android.com/reference/java/lang/String.html" style="color:rgb(0,102,153); text-decoration:none">String</a></nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#getTypeName()" style="color:rgb(0,102,153); text-decoration:none">getTypeName</a></span>()</nobr>
Return a human-readable name describe the type of the network, for example "WIFI" or "MOBILE".
<nobr>boolean</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#isAvailable()" style="color:rgb(0,102,153); text-decoration:none">isAvailable</a></span>()</nobr>
Indicates whether network connectivity is possible.
<nobr>boolean</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#isConnected()" style="color:rgb(0,102,153); text-decoration:none">isConnected</a></span>()</nobr>
Indicates whether network connectivity exists and it is possible to establish connections and pass data.
<nobr>boolean</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#isConnectedOrConnecting()" style="color:rgb(0,102,153); text-decoration:none">isConnectedOrConnecting</a></span>()</nobr>
Indicates whether network connectivity exists or is in the process of being established.
<nobr>boolean</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#isFailover()" style="color:rgb(0,102,153); text-decoration:none">isFailover</a></span>()</nobr>
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.
<nobr>boolean</nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#isRoaming()" style="color:rgb(0,102,153); text-decoration:none">isRoaming</a></span>()</nobr>
Indicates whether the device is currently roaming on this network.
<nobr><a href="http://developer.android.com/reference/java/lang/String.html" style="color:rgb(0,102,153); text-decoration:none">String</a></nobr> <nobr><span class="sympad" style="margin-right:2px"><a href="http://developer.android.com/reference/android/net/NetworkInfo.html#toString()" style="color:rgb(0,102,153); text-decoration:none">toString</a></span>()</nobr>
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; }



isConnectionAvailable則實現了所有網路是否可用的判斷,程式不關心當前使用的是何種網路,只需關係是否連線上網際網路既可,第一個工具類在某些時候會需要使用到,比如只在WiFi情況下才進行下載的操作,等等。

謝謝!






相關文章