[英]Difference between NetworkInfo.isConnected() and NetworkInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED. What to use?
我想知道哪種方法可以精確檢查網絡狀態是否成功連接。
因此,如果我們查看NetworkInfo.java
類的源代碼 ,您將看到網絡詳細狀態被聲明為Enum,
public enum DetailedState {
/** Ready to start data connection setup. */
IDLE,
/** Searching for an available access point. */
SCANNING,
/** Currently setting up data connection. */
CONNECTING,
/** Network link established, performing authentication. */
AUTHENTICATING,
/** Awaiting response from DHCP server in order to assign IP address information. */
OBTAINING_IPADDR,
/** IP traffic should be available. */
CONNECTED,
/** IP traffic is suspended */
SUSPENDED,
/** Currently tearing down data connection. */
DISCONNECTING,
/** IP traffic not available. */
DISCONNECTED,
/** Attempt to connect failed. */
FAILED,
/** Access to this network is blocked. */
BLOCKED,
/** Link has poor connectivity. */
VERIFYING_POOR_LINK,
/** Checking if network is a captive portal */
CAPTIVE_PORTAL_CHECK
}
但是如果您閱讀這些詳細狀態的評論,請在下面說明這些
網絡連接的細粒度狀態。 很少有應用程序可能會對此詳細程度感興趣。 大多數應該使用android.net.NetworkInfo.State狀態。
NetworkInfo.java類中的isConnected()
方法僅檢查State.CONNECTED
State
,
public boolean isConnected() {
synchronized (this) {
return mState == State.CONNECTED;
}
}
基本上如果你使用
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
這應該足夠,因為上面的代碼將查詢活動網絡並確定它是否具有Internet連接。 一旦你知道它,你就可以繼續訪問互聯網資源。
Java的:
ConnectivityManager manager =
(ConnectivityManager)getApplication.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info=manager.getActiveNetworkInfo()
if(info!=null && info.isConnected()){
// you are online for sure.
}
科特林:
val manager = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val info = manager.getActiveNetworkInfo()
if (info != null && info.isConnected()) {
// you are online for sure.
}
我在開發中使用Above代碼來確保我的設備已連接到Internet。
閱讀此主題以了解其中的差異以及如何更改狀態
源代碼
public boolean isConnected() {
synchronized (this) {
return mState == State.CONNECTED;
}
}
所以它是一樣的
從這里https://developer.android.com/training/monitoring-device-state/connectivity-monitoring#java
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnected();
您需要將此添加到清單中
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.