NetworkInfo.java revision 2ecc74f330959be0a3bde10e55110a8218c0887c
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 } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 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 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkInfo(int type, int subtype, String typeName, String subtypeName) { 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!ConnectivityManager.isNetworkTypeValid(type)) { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("Invalid network type: " + type); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNetworkType = type; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubtype = subtype; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTypeName = typeName; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubtypeName = subtypeName; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setDetailedState(DetailedState.IDLE, null, null); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mState = State.UNKNOWN; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsAvailable = true; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsRoaming = false; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports the type of network (currently mobile or Wi-Fi) to which the 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * info in this object pertains. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the network type 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getType() { 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mNetworkType; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a network-type-specific integer describing the subtype 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the network. 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the network subtype 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSubtype() { 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSubtype; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setSubtype(int subtype, String subtypeName) { 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubtype = subtype; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubtypeName = subtypeName; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a human-readable name describe the type of the network, 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for example "WIFI" or "MOBILE". 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the name of the network type 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getTypeName() { 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTypeName; 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 describing the subtype of the network. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the name of the network subtype 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSubtypeName() { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSubtypeName; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity exists or is in the process 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of being established. This is good for applications that need to 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * do anything related to the network other than read or write data. 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For the latter, call {@link #isConnected()} instead, which guarantees 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the network is fully usable. 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if network connectivity exists or is in the process 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of being established, {@code false} otherwise. 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isConnectedOrConnecting() { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mState == State.CONNECTED || mState == State.CONNECTING; 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 and it is possible to establish 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * connections and pass data. 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if network connectivity exists, {@code false} otherwise. 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isConnected() { 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mState == State.CONNECTED; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether network connectivity is possible. A network is unavailable 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when a persistent or semi-persistent condition prevents the possibility 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of connecting to that network. Examples include 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device is out of the coverage area for any network of this type.</li> 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device is on a network other than the home network (i.e., roaming), and 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data roaming has been disabled.</li> 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The device's radio is turned off, e.g., because airplane mode is enabled.</li> 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if the network is available, {@code false} otherwise 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isAvailable() { 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIsAvailable; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets if the network is available, ie, if the connectivity is possible. 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isAvailable the new availability value. 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIsAvailable(boolean isAvailable) { 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsAvailable = isAvailable; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether the current attempt to connect to the network 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resulted from the ConnectivityManager trying to fail over to this 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network following a disconnect from another network. 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if this is a failover attempt, {@code false} 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * otherwise. 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isFailover() { 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIsFailover; 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the failover boolean. 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isFailover {@code true} to mark the current connection attempt 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as a failover. 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFailover(boolean isFailover) { 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsFailover = isFailover; 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether the device is currently roaming on this network. 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When {@code true}, it suggests that use of data on this network 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may incur extra costs. 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if roaming is in effect, {@code false} otherwise. 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isRoaming() { 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIsRoaming; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setRoaming(boolean isRoaming) { 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsRoaming = isRoaming; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports the current coarse-grained state of the network. 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the coarse-grained state 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public State getState() { 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mState; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reports the current fine-grained state of the network. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the fine-grained state 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DetailedState getDetailedState() { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDetailedState; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the fine-grained state of the network. 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param detailedState the {@link DetailedState}. 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param reason a {@code String} indicating the reason for the state change, 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one was supplied. May be {@code null}. 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param extraInfo an optional {@code String} providing addditional network state 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information passed up from the lower networking layers. 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setDetailedState(DetailedState detailedState, String reason, String extraInfo) { 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mDetailedState = detailedState; 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mState = stateMap.get(detailedState); 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mReason = reason; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mExtraInfo = extraInfo; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Report the reason an attempt to establish connectivity failed, 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one is available. 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the reason for failure, or null if not available 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getReason() { 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mReason; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Report the extra information about the network state, if any was 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provided by the lower networking layers., 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if one is available. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the extra information, or null if not available 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getExtraInfo() { 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mExtraInfo; 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder builder = new StringBuilder("NetworkInfo: "); 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project builder.append("type: ").append(getTypeName()).append("[").append(getSubtypeName()). 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append("], state: ").append(mState).append("/").append(mDetailedState). 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", reason: ").append(mReason == null ? "(unspecified)" : mReason). 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo). 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", roaming: ").append(mIsRoaming). 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", failover: ").append(mIsFailover). 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", isAvailable: ").append(mIsAvailable); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return builder.toString(); 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface. 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mNetworkType); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mSubtype); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mTypeName); 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mSubtypeName); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mState.name()); 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mDetailedState.name()); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mIsFailover ? 1 : 0); 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mIsAvailable ? 1 : 0); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mIsRoaming ? 1 : 0); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mReason); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mExtraInfo); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Implement the Parcelable interface. 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<NetworkInfo> CREATOR = 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<NetworkInfo>() { 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NetworkInfo createFromParcel(Parcel in) { 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int netType = in.readInt(); 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int subtype = in.readInt(); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String typeName = in.readString(); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String subtypeName = in.readString(); 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkInfo netInfo = new NetworkInfo(netType, subtype, typeName, subtypeName); 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mState = State.valueOf(in.readString()); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mDetailedState = DetailedState.valueOf(in.readString()); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsFailover = in.readInt() != 0; 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsAvailable = in.readInt() != 0; 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mIsRoaming = in.readInt() != 0; 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mReason = in.readString(); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project netInfo.mExtraInfo = in.readString(); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return netInfo; 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NetworkInfo[] newArray(int size) { 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new NetworkInfo[size]; 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 377