本文原做者 长鸣鸟 ,未经赞成,转载不带名的严重鄙视。
谷歌在Android5.0以后的版本加入了CaptivePotalLogin服务。本服务的功能是检查网络链接互联网状况,主要针对于Wi-Fi,不让Android设备自动链接那些不能联网的无线热点,白白耗电。
该服务的原理就是让接入无线热点后,测一下网站connectivitycheck.gstatic.com的联通状况。
但对于不能访问谷歌服务器的地区,问题就来了:java
若是谷歌(谷歌服务)认为WiFi网络没法联网,就不会自动链接到该WiFi热点。并且若是设备有移动网络可用,就会自动切换到2G/3G/LTE。而且让WiFi网络的标志上面显示感叹号标志。android
出现感叹号的同时,该服务会一直试探服务器,直到联通为止。该过程会消耗流量和电量,甚至致使部分设备没法休眠。shell
这个感叹号会使广大强迫症晚期患者没法接受。服务器
对于Android Source开发的同窗,最好的解决办法天然是修改源码:
方案1:更换测试地址
frameworks/base/packages/SettingsProvider/res/values/defaults.xml:网络
@@ -223,7 +223,7 @@ <!-- Default for Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 1 == enabled, all other values will disable it --> <integer name="def_captive_portal_detection_enable">0</integer> + <string name="def_captive_portal_server">www.androidbak.net</string>
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java:ide
@@ -2623,9 +2623,12 @@ class DatabaseHelper extends SQLiteOpenHelper { loadBooleanSetting(stmt, Settings.Global.ASSISTED_GPS_ENABLED, R.bool.assisted_gps_enabled); loadIntegerSetting(stmt, Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, R.integer.def_captive_portal_detection_enable); + loadStringSetting(stmt, Settings.Global.CAPTIVE_PORTAL_SERVER, + R.string.def_captive_portal_server); +
方案2:禁用服务
本文原做者 长鸣鸟 ,未经赞成,转载不带名的严重鄙视。测试
--- a/frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java +++ b/frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java @@ -270,8 +270,11 @@ public class NetworkMonitor extends StateMachine { mLingerDelayMs = SystemProperties.getInt(LINGER_DELAY_PROPERTY, DEFAULT_LINGER_DELAY_MS); - mIsCaptivePortalCheckEnabled = Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 1) == 1; + //mIsCaptivePortalCheckEnabled = Settings.Global.getInt(mContext.getContentResolver(), + //Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 1) == 1; + mIsCaptivePortalCheckEnabled = false;
对于普通用户,有一个简便的方法:
第一步:安装adb,很少赘述。
第二步:在终端输入adb shell settings put global captive_portal_server www.g.cn
或者输入adb shell settings put global captive_portal_detection_enabled 0
重启有效,恢复出厂设置要重来。
本文原做者 长鸣鸟 ,未经赞成,转载不带名的严重鄙视。
That’s all.网站