Android为了对网络状态进行检测,采用了一种叫做captive detection的方式进行网络状态检测。其实说起来很简单,每当连接到一个网络,比如移动数据网络或者WIFI的时候,Android的NetworkMonitor模块会构造一个http/https的请求,发送到指定的服务器,然后利用收到的响应进行网络状态判断。
安卓手机网络状态有如下几种状态:
安卓类原生ROM刷机包默认的204服务器是由谷歌提供,由于谷歌在我国大陆区不可访问。wifi有叹号或打叉这都是正常的,因此,不要再见到WiFi的叹号就向ROM作者反馈bug啦,那根本就不是bug!
安卓9以下版本ROM修改204服务器教程:
源码位置:frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
原代码:
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_HTTPS_URL="https://connect.rom.miui.com/generate_204";
private static final String DEFAULT_HTTP_URL="http://connect.rom.miui.com/generate_204";
private static final String DEFAULT_FALLBACK_URL="http://connect.rom.miui.com/generate_204";
private static final String DEFAULT_OTHER_FALLBACK_URLS="http://connect.rom.miui.com/generate_204";
重新编译,解决。
安卓10以上版本ROM修改204服务器教程:
Android 10,我们发现frameworks/base/services/core/java/com/android/server/connectivity/下已经没有了NetworkMonitor。原来,自Android Q开始,网络状态由networkstack判断,相应的,我们依然通过修改204服务器来解决这个问题。
源码位置:packages/modules/NetworkStack/res/config.xml
原代码:
<!-- HTTP URL for network validation, to use for detecting captive portals. -->
<string name="default_captive_portal_http_url" translatable="false">http://connectivitycheck.gstatic.com/generate_204</string>
<!-- HTTPS URL for network validation, to use for confirming internet connectivity. -->
<string name="default_captive_portal_https_url" translatable="false">https://www.google.com/generate_204</string>
<!-- List of fallback URLs to use for detecting captive portals. -->
<string-array name="default_captive_portal_fallback_urls" translatable="false">
<item>http://www.google.com/gen_204</item>
<item>http://play.googleapis.com/generate_204</item>
</string-array>
修改为:
<!-- HTTP URL for network validation, to use for detecting captive portals. -->
<string name="default_captive_portal_http_url" translatable="false">http://connect.rom.miui.com/generate_204</string>
<!-- HTTPS URL for network validation, to use for confirming internet connectivity. -->
<string name="default_captive_portal_https_url" translatable="false">https://connect.rom.miui.com/generate_204</string>
<!-- List of fallback URLs to use for detecting captive portals. -->
<string-array name="default_captive_portal_fallback_urls" translatable="false">
<item>http://connect.rom.miui.com/generate_204</item>
<item>http://connect.rom.miui.com/generate_204</item>
</string-array>