Android13版本消除WIFI叹号

Android13版本,MTK方案

Android为了对网络状态进行检测,采用了一种叫做captive detection的方式进行网络状态检测。其实说起来很简单,每当连接到一个网络,比如移动数据网络或者WIFI的时候,Android的NetworkMonitor模块会构造一个http/https的请求,发送到指定的服务器,然后利用收到的响应进行网络状态判断。

安卓手机网络状态有如下几种状态:

1) 根本就没有返回,这种情况代表当前没有Internet访问;

2) 返回状态码204,这种情况代表具备完整的Internet访问(特定的服务器专门返回204的状态码);

3) 除204以外的其他大于200而小于400的状态码,这种状态码一般代表需要进行Web登录的网络连接,比如机场、商场提供的需要短信登录的网络。这种情况下Android会构造一个可能需要登录的状态栏通知以通知用户可能需要进行登录。

安卓类原生ROM刷机包默认的204服务器是由谷歌提供,由于谷歌在我国大陆区不可访问,wifi有叹号或打叉这都是正常的。

Android13版本修改方案:

源码位置:sys\packages\modules\NetworkStack

查找网上资料,给出的解决办法是修改config.xml资源文件

res\values\config.xml

<string name="default_captive_portal_http_url" translatable="false">http://connectivitycheck.gstatic.com/generate_204</string>

<string name="default_captive_portal_https_url" translatable="false">https://www.google.com/generate_204</string>

<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>

修改为:

<string name="default_captive_portal_http_url" translatable="false">http://connect.rom.miui.com/generate_204</string>

<string name="default_captive_portal_https_url" translatable="false">https://connect.rom.miui.com/generate_204</string>

<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>

编译后烧录发现没有效果。查看源码后发现会先取R.array.config_captive_portal_https_urls的值

src\com\android\server\connectivity\NetworkMonitor.java

private URL[] makeCaptivePortalHttpsUrls(@NonNull Context context) {
    final URL testUrl = getTestUrl(TEST_CAPTIVE_PORTAL_HTTPS_URL);
    if (testUrl != null) return new URL[] { testUrl };
    final String firstUrl = getCaptivePortalServerHttpsUrl(context);
    try {
        final URL[] settingProviderUrls =
            combineCaptivePortalUrls(firstUrl, CAPTIVE_PORTAL_OTHER_HTTPS_URLS);
        // firstUrl will at least be default configuration, so default value in
        // getProbeUrlArrayConfig is actually never used.
        return getProbeUrlArrayConfig(context, settingProviderUrls,
                R.array.config_captive_portal_https_urls,
                DEFAULT_CAPTIVE_PORTAL_HTTPS_URLS, this::makeURL);
    } catch (Exception e) {
        // Don't let a misconfiguration bootloop the system.
        Log.e(TAG, "Error parsing configured https URLs", e);
        // Ensure URL aligned with legacy configuration.
        return new URL[]{makeURL(firstUrl)};
    }
}

private <T> T[] getProbeUrlArrayConfig(@NonNull Context context, @NonNull T[] providerValue,
        @ArrayRes int configResId, String[] defaultConfig,
        @NonNull Function<String, T> resourceConverter) {
    final Resources res = context.getResources();
    String[] configValue = res.getStringArray(configResId);
    Log.i(TAG, "configValue.length = " + configValue.length);
    if (configValue.length == 0) {
        if (providerValue.length > 0) {
            return providerValue;
        }
        configValue = defaultConfig;
    }
    return convertStrings(configValue, resourceConverter, Arrays.copyOf(providerValue, 0));
}

如果R.array.config_captive_portal_https_urls是有值的,则会使用config_captive_portal_https_urls的值。

在config.xml中发现config_captive_portal_https_urls没有值

res\values\config.xml

<string-array name="config_captive_portal_https_urls" translatable="false">
</string-array>

添加打印,configValue的长度是大于0的.

最终解决方式:

修改vnd\vendor\mediatek\proprietary\packages\overlay\vendor\NetworkStackResOverlay\res\values\config.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

-    <string-array name="config_captive_portal_https_urls" translatable="false">
-        <item>https://connectivitycheck.gstatic.com/generate_204</item>
-        <item>https://www.google.cn/generate_204</item>
-    </string-array>
+    <string-array name="config_captive_portal_https_urls" translatable="false">
+        <item>https://connect.rom.miui.com/generate_204</item>
+        <item>https://connect.rom.miui.com/generate_204</item>
+    </string-array>
    
</resources>

generate_204可用地址:测联通性的网址_generate_204 测速地址-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值