android O連接Wifi,可以上網,但是卻提示無法訪問網絡,並且在wifi圖標上有一個'x'。
從android N開始引入了監控機制,每次連接都會訪問一下google的服務器,由於國內被牆,所以就會出先上面的問題。連接vpn,訪問google就不會有'x'。
logcat錯誤:
03-30 00:32:37.407 1385 5819 D NetworkMonitor/NetworkAgentInfo [WIFI () - 102]: PROBE_HTTPS https://www.google.com/generate_204 Probe failed with exception java.net.SocketTimeoutException: failed to connect to www.google.com/75.126.33.156 (port 443) from /192.168.1.194 (port 41944) after 10000ms
對應文件frameworks/base/services/core/java/com/android/server/connectivity/NetworkMoniter.java
public class NetworkMonitor extends StateMachine {
private static final String TAG = NetworkMonitor.class.getSimpleName();
private static final boolean DBG = true;
private static final boolean VDBG = false;
// Default configuration values for captive portal detection probes.
// TODO: append a random length parameter to the default HTTPS url.
// TODO: randomize browser version ids in the default User-Agent String.
private static final String DEFAULT_HTTPS_URL = "https://www.google.com/generate_204";
private static final String DEFAULT_HTTP_URL =
"http://connectivitycheck.gstatic.com/generate_204";
private static final String DEFAULT_FALLBACK_URL = "http://www.google.com/gen_204";
private static final String DEFAULT_OTHER_FALLBACK_URLS =
"http://play.googleapis.com/generate_204";
private static final String DEFAULT_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) "
+ "AppleWebKit/537.36 (KHTML, like Gecko) "
+ "Chrome/60.0.3112.32 Safari/537.36";
將上面的DEFAULT_HTTPS_URL更改為可以訪問的網站即可,例如"https//www.google.cn/generate_204"
提示不能訪問的代碼網絡的代碼:
packages/apps/Settings/src/com/android/settings/wifi/WifiNoInternetDialog.java: ap.mMessage = getString(R.string.no_internet_access_text);
Tony Liu
2018-4-10