消除Android 5.0 ~ 7.1.1原生系統中感嘆號或叉號
版權宣告:本文源自簡書tianma,轉載請務必註明出處: http://www.jianshu.com/p/441863cbc9ef
在使用Android5.0以上的原生系統過程中,大家會遇到明明自己網路是OK的,但是會在狀態列的移動訊號或 WiFi 圖示旁顯示感嘆號(5.0 ~ 7.0.0)或叉號(7.1.1),並且會提示“已連線,但不能接入網際網路”的情況... 如下圖所示:
原因
從Android 5.0開始,系統連線網路或切換網路時,系統模組 NetworkMonitor 會向一特定網址傳送資料請求,根據響應的結果從而判斷網路的連通性。在原生Android系統中,這一特定網址是Google的網址,不翻牆訪問不了,故而會出現感嘆號或叉號。
解決方案
既然知曉了原理,那麼解決方案也很明確了:
- 完全關閉網路檢查服務(不可取):
缺點: 完全遮蔽該系統功能帶來明顯的問題,當你使用公共 Wi-Fi 這種需要使用 portal 驗證的網路時,因為網路檢查被關閉,系統在訪問 portal 驗證頁面時無法返回正確的值,最終導致無法完成驗證和上網。adb shell settings put global captive_portal_detection_enabled 0
-
替換檢查網路的網址(可取):
通過ADB命令,將驗證服務的網址替換為國內正常可以訪問的網址
Android 5.x ~ 6.x 解決方案
adb shell "settings put global captive_portal_server www.v2ex.com"
adb shell reboot
Android 7.0.0 ~ 7.1.0 解決方案
adb shell "settings put global captive_portal_server captive.v2ex.co"
adb shell reboot
Android 7.1.1 解決方案
adb shell "settings put global captive_portal_https_url https://captive.v2ex.co/generate_204"
adb shell reboot
原始碼
問題解決了,問題產生的根本源頭在哪呢,在原始碼裡面 :)
Android 5.x ~ 6.x
private int isCaptivePortal() {
if (!mIsCaptivePortalCheckEnabled) return 204;
HttpURLConnection urlConnection = null;
int httpResponseCode = 599;
try {
URL url = new URL("http", mServer, "/generate_204");
if (DBG) {
log("Checking " + url.toString() + " on " +
mNetworkAgentInfo.networkInfo.getExtraInfo());
}
} // ...
}
原來的 mServer
是 clients3.google.com
,我們最終將其換為 www.v2ex.com
.
Android 7.0 ~ 7.1.0
private static String getCaptivePortalServerUrl(Context context, boolean isHttps) {
String server = Settings.Global.getString(context.getContentResolver(),
Settings.Global.CAPTIVE_PORTAL_SERVER);
if (server == null) server = DEFAULT_SERVER;
return (isHttps ? "https" : "http") + "://" + server + "/generate_204";
}
Android 7.0 ~ 7.1.0 新增了https的驗證請求,所以我們把 server
的值改為支援https的 captive.v2ex.co
.
Android 7.1.1
private static String getCaptivePortalServerHttpsUrl(Context context) {
return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, DEFAULT_HTTPS_URL);
}
DEFAULT_HTTPS_URL
的值由原來的 https://www.google.com/generate_204
替換為 https://captive.v2ex.co/generate_204
.
相關原始碼連結:
參考
相關文章
- 解決 Eclipse專案紅感嘆號(或×號)Eclipse
- iPhone14Pro或採用感嘆號打孔iPhone
- Eclipse 專案有紅感嘆號Eclipse
- win10網路感嘆號怎麼解決_win10網路感嘆號修復方法Win10
- win10系統印表機出現感嘆號的解決方法Win10
- win10系統9008驅動感嘆號的最佳解決方法Win10
- 感嘆號:bash 的歷史擴充套件功能套件
- win10 dvd驅動器為感嘆號怎麼辦_win10 dvd驅動器為感嘆號如何修復Win10
- win10 開始選單感嘆號怎麼解決 win10內建應用的感嘆號怎麼去掉Win10
- win10自帶應用感嘆號怎麼解決 win10自帶應用出現感嘆號如何修復Win10
- wifi已連線但有感嘆號怎麼辦 電腦連線wifi出現感嘆號怎麼辦WiFi
- win10系統下網路出現感嘆號連不上網如何解決Win10
- win10正式版系統中乙太網控制器出現感嘆號的解決方法Win10
- win 10自帶軟體感嘆號打不開如何解決_win10自帶應用感嘆號打不開修復方法Win10
- win10系統重置後網路圖示上出現感嘆號怎麼解決Win10
- win10 專業版硬碟上面有感嘆號怎麼辦_win10系統硬碟有感嘆號如何去除Win10硬碟
- win10系統下裝置管理器驅動顯示感嘆號怎麼解決Win10
- 《從零開始學Swift》學習筆記(Day 28)——總結使用問號(?)和感嘆號(!)Swift筆記
- Win10系統中裝置管理器網路卡裝置感嘆號顯示錯誤程式碼43如何解決Win10
- appcompat_v7報錯,appcompat感嘆號解決APP
- 修改Android系統字號(二)Android
- win10 出現網路歎號怎麼辦_win10網路感嘆號修復方法Win10
- 系統改變號和系統提交號
- PHP 訊號中斷系統PHP
- win10鍵盤驅動顯示黃色感嘆號如何解決_win10系統鍵盤驅動有感嘆號解決教程Win10
- SCSS 檔案裡的感嘆號用法 - 給變數設定預設值CSS變數
- ArcMap的mxd檔案沒有資料、顯示感嘆號怎麼辦?
- android 專案中出現紅色感嘆號的解決方法Android
- 令人感嘆的10個非主流作業系統作業系統
- 訊號課組(一) 訊號與系統 Part 0 MATLAB在訊號與系統中的使用Matlab
- 檢視系統中的WWN號
- android系統中獲取imei號和其他手機資訊Android
- 叫號系統排隊系統掛號系統實現(JAVA佇列)Java佇列
- 訊號與系統
- CSS 叉號按鈕效果CSS
- linux系統程式設計之訊號(一):中斷與訊號Linux程式設計
- Android程式設計獲取手機型號,本機電話號碼,sdk版本及firmware版本號(即系統版本號)Android程式設計
- 如何消除MySQL賬號的安全隱患MySql