NetworkInfo.java revision a2a1b911a31dd94ee75e94845f762b91f1db1368
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.net; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.EnumMap; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Describes the status of a network interface of a given type 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (currently either Mobile or Wifi). 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class NetworkInfo implements Parcelable { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Coarse-grained network state. This is probably what most applications should 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use, rather than {@link android.net.NetworkInfo.DetailedState DetailedState}. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The mapping between the two is as follows: 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <br/><br/> 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <table> 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><b>Detailed state</b></td><td><b>Coarse-grained state</b></td></tr> 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>IDLE</code></td><td><code>DISCONNECTED</code></td></tr> 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>SCANNING</code></td><td><code>CONNECTING</code></td></tr> 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>CONNECTING</code></td><td><code>CONNECTING</code></td></tr> 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>AUTHENTICATING</code></td><td><code>CONNECTING</code></td></tr> 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>CONNECTED</code></td><td<code>CONNECTED</code></td></tr> 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>DISCONNECTING</code></td><td><code>DISCONNECTING</code></td></tr> 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>DISCONNECTED</code></td><td><code>DISCONNECTED</code></td></tr> 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>UNAVAILABLE</code></td><td><code>DISCONNECTED</code></td></tr> 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td><code>FAILED</code></td><td><code>DISCONNECTED</code></td></tr> 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </table> 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum State { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONNECTING, CONNECTED, SUSPENDED, DISCONNECTING, DISCONNECTED, UNKNOWN 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The fine-grained state of a network connection. This level of detail 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is probably of interest to few applications. Most should use 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.net.NetworkInfo.State State} instead. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum DetailedState { 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Ready to start data connection setup. */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IDLE, 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Searching for an available access point. */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SCANNING, 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Currently setting up data connection. */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONNECTING, 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Network link established, performing authentication. */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AUTHENTICATING, 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Awaiting response from DHCP server in order to assign IP address information. */ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OBTAINING_IPADDR, 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IP traffic should be available. */ 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CONNECTED, 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IP traffic is suspended */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SUSPENDED, 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Currently tearing down data connection. */ 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISCONNECTING, 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IP traffic not available. */ 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISCONNECTED, 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Attempt to connect failed. */ 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FAILED 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is the map described in the Javadoc comment above. The positions 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the elements of the array must correspond to the ordinal values 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of <code>DetailedState</code>. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final EnumMap<DetailedState, State> stateMap = 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new EnumMap<DetailedState, State>(DetailedState.class); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.IDLE, State.DISCONNECTED); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.SCANNING, State.DISCONNECTED); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.CONNECTING, State.CONNECTING); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.AUTHENTICATING, State.CONNECTING); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.OBTAINING_IPADDR, State.CONNECTING); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.CONNECTED, State.CONNECTED); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.SUSPENDED, State.SUSPENDED); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.DISCONNECTING, State.DISCONNECTING); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.DISCONNECTED, State.DISCONNECTED); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(DetailedState.FAILED, State.DISCONNECTED); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 100a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mNetworkType; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mSubtype; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mTypeName; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mSubtypeName; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private State mState; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private DetailedState mDetailedState; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mReason; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mExtraInfo; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsFailover; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsRoaming; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity is possible: 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsAvailable; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type network type 1182ecc74f330959be0a3bde10e55110a8218c0887cEric Shienbrood * @deprecated 1192ecc74f330959be0a3bde10e55110a8218c0887cEric Shienbrood * @hide because this constructor was only meant for internal use (and 1202ecc74f330959be0a3bde10e55110a8218c0887cEric Shienbrood * has now been superseded by the package-private constructor below). 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NetworkInfo(int type) {} 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 124d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff /** 125d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff * @hide 126d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff */ 127d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff public NetworkInfo(int type, int subtype, String typeName, String subtypeName) { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!ConnectivityManager.isNetworkTypeValid(type)) { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("Invalid network type: " + type); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNetworkType = type; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubtype = subtype; 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTypeName = typeName; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubtypeName = subtypeName; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setDetailedState(DetailedState.IDLE, null, null); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mState = State.UNKNOWN; 1378206ff30c23c76851bebc8d72a65e65b0f7f9a29Robert Greenwalt mIsAvailable = false; // until we're told otherwise, assume unavailable 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsRoaming = false; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports the type of network (currently mobile or Wi-Fi) to which the 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * info in this object pertains. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the network type 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getType() { 147a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 148a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mNetworkType; 149a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a network-type-specific integer describing the subtype 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the network. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the network subtype 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSubtype() { 158a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 159a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mSubtype; 160a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setSubtype(int subtype, String subtypeName) { 164a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 165a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mSubtype = subtype; 166a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mSubtypeName = subtypeName; 167a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a human-readable name describe the type of the network, 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for example "WIFI" or "MOBILE". 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the name of the network type 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getTypeName() { 176a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 177a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mTypeName; 178a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a human-readable name describing the subtype of the network. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the name of the network subtype 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSubtypeName() { 186a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 187a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mSubtypeName; 188a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity exists or is in the process 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of being established. This is good for applications that need to 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * do anything related to the network other than read or write data. 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For the latter, call {@link #isConnected()} instead, which guarantees 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the network is fully usable. 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if network connectivity exists or is in the process 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of being established, {@code false} otherwise. 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isConnectedOrConnecting() { 201a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 202a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mState == State.CONNECTED || mState == State.CONNECTING; 203a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity exists and it is possible to establish 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * connections and pass data. 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if network connectivity exists, {@code false} otherwise. 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isConnected() { 212a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 213a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mState == State.CONNECTED; 214a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity is possible. A network is unavailable 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when a persistent or semi-persistent condition prevents the possibility 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of connecting to that network. Examples include 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device is out of the coverage area for any network of this type.</li> 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device is on a network other than the home network (i.e., roaming), and 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data roaming has been disabled.</li> 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device's radio is turned off, e.g., because airplane mode is enabled.</li> 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if the network is available, {@code false} otherwise 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isAvailable() { 230a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 231a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mIsAvailable; 232a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets if the network is available, ie, if the connectivity is possible. 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isAvailable the new availability value. 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIsAvailable(boolean isAvailable) { 242a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 243a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mIsAvailable = isAvailable; 244a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether the current attempt to connect to the network 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resulted from the ConnectivityManager trying to fail over to this 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network following a disconnect from another network. 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if this is a failover attempt, {@code false} 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * otherwise. 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isFailover() { 255a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 256a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mIsFailover; 257a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the failover boolean. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isFailover {@code true} to mark the current connection attempt 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as a failover. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFailover(boolean isFailover) { 267a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 268a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mIsFailover = isFailover; 269a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether the device is currently roaming on this network. 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When {@code true}, it suggests that use of data on this network 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may incur extra costs. 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if roaming is in effect, {@code false} otherwise. 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isRoaming() { 279a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 280a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mIsRoaming; 281a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setRoaming(boolean isRoaming) { 285a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 286a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff mIsRoaming = isRoaming; 287a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports the current coarse-grained state of the network. 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the coarse-grained state 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public State getState() { 295a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 296a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mState; 297a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports the current fine-grained state of the network. 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the fine-grained state 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DetailedState getDetailedState() { 305a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 306a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mDetailedState; 307a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the fine-grained state of the network. 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param detailedState the {@link DetailedState}. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param reason a {@code String} indicating the reason for the state change, 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one was supplied. May be {@code null}. 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param extraInfo an optional {@code String} providing addditional network state 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information passed up from the lower networking layers. 317d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff * @hide 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 319d649c12815bcf944b2c97371f3f60716a42a1557Irfan Sheriff public void setDetailedState(DetailedState detailedState, String reason, String extraInfo) { 320a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 321a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mDetailedState = detailedState; 322a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mState = stateMap.get(detailedState); 323a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mReason = reason; 324a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff this.mExtraInfo = extraInfo; 325a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Report the reason an attempt to establish connectivity failed, 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one is available. 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the reason for failure, or null if not available 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getReason() { 334a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 335a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mReason; 336a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Report the extra information about the network state, if any was 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provided by the lower networking layers., 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one is available. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the extra information, or null if not available 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getExtraInfo() { 346a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 347a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return mExtraInfo; 348a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 353a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 354a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff StringBuilder builder = new StringBuilder("NetworkInfo: "); 355a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff builder.append("type: ").append(getTypeName()).append("[").append(getSubtypeName()). 356a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append("], state: ").append(mState).append("/").append(mDetailedState). 357a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", reason: ").append(mReason == null ? "(unspecified)" : mReason). 358a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo). 359a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", roaming: ").append(mIsRoaming). 360a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", failover: ").append(mIsFailover). 361a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff append(", isAvailable: ").append(mIsAvailable); 362a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff return builder.toString(); 363a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface. 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 379a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff synchronized (this) { 380a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mNetworkType); 381a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mSubtype); 382a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mTypeName); 383a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mSubtypeName); 384a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mState.name()); 385a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mDetailedState.name()); 386a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mIsFailover ? 1 : 0); 387a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mIsAvailable ? 1 : 0); 388a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeInt(mIsRoaming ? 1 : 0); 389a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mReason); 390a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff dest.writeString(mExtraInfo); 391a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff } 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface. 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<NetworkInfo> CREATOR = 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<NetworkInfo>() { 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NetworkInfo createFromParcel(Parcel in) { 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int netType = in.readInt(); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int subtype = in.readInt(); 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String typeName = in.readString(); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String subtypeName = in.readString(); 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkInfo netInfo = new NetworkInfo(netType, subtype, typeName, subtypeName); 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mState = State.valueOf(in.readString()); 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mDetailedState = DetailedState.valueOf(in.readString()); 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsFailover = in.readInt() != 0; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsAvailable = in.readInt() != 0; 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsRoaming = in.readInt() != 0; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mReason = in.readString(); 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mExtraInfo = in.readString(); 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return netInfo; 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NetworkInfo[] newArray(int size) { 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new NetworkInfo[size]; 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 421