那些我们解过的bug之WiFi连接后可以正常使用,但是提示已连接,但无法访问网络

问题描述

1.进入设置-网络互联网
2.开启WiFi,选择Ap连接
wifi连接成功,能够正常上网,但是提示:已连接,但无法访问互联网

问题分析

这个从现象来看,应该是提示错误。

那我们就看看代码中提示的位置吧。

frameworks/base/packages/SettingsLib/res/values-zh-rCN/strings.xml:42:    
<string name="wifi_connected_no_internet" msgid="3149853966840874992">"已连接,但无法访问互联网"</string>

packages/SettingsLib/res/values/strings.xml:98:    
<string name="wifi_connected_no_internet">Connected, no Internet</string>

frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java

else if (!nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
   return context.getString(R.string.wifi_connected_no_internet);
}          

问题解决

我先搜索了一下MTK的FAQ,找到二个相关的说明:

[FAQ18184] [Legacy Wi-Fi][M]每次连接上网络会提示“已连接无法访问互联网”几秒钟后消失
[FAQ19267] wifi: 连接网络时提示“已连接无法访问互联网”几秒钟后消失

MTK的解释是说,由于手机会连接网站—–connectivitycheck.gstatic.com,如果有得到200, 就代表有Internet能力,但是我们国家连此网站不上,所以才导致此问题。

所以MTK给的解决方法:

M版本:
 若希望不显示"已连接无法访问互联网"这个提示,可参照如下方法进行修改:
 修改DefaultWifiLibExt.java的shouldCheckNetworkCapabilities函数,将return true;修改为return false。

N版本:
在DefaultWifiLibExt.java中仿照Op01WifiLibExt.java添加shouldCheckNetworkCapabilities函数,并返回fales;
修改AccessPoint.java的getSummary函数,在if (nc != null && !nc.hasCapability(nc.NET_CAPABILITY_VALIDATED)) 这个if语句中添加shouldCheckNetworkCapabilities条件
if (nc != null && !nc.hasCapability(nc.NET_CAPABILITY_VALIDATED) && AccessPointExt.getWifiPlugin(context).shouldCheckNetworkCapabilities())

但是,我的手机版本是android 8.1.0,我搜索项目代码,根本就找不到DefaultWifiLibExt.java和shouldCheckNetworkCapabilities方法。

于是,我咨询了一下朋友,朋友告诉我说修改这个的默认值为0:
frameworks/base/packages/SettingsProvider/res/values/defaults.xml

<!-- Default for Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED -->
<integer name="def_captive_portal_detection_enabled" translatable="false">0</integer>

于是,我将此值设置为0,编译验证,问题解决。

问题倒推

在frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java文件中,读取初始值def_captive_portal_detection_enabled:

loadIntegerSetting(stmt, Settings.Global.CAPTIVE_PORTAL_MODE,R.integer.def_captive_portal_detection_enabled);

在frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java文件中读取CAPTIVE_PORTAL_MODE值:

mIsCaptivePortalCheckEnabled = Settings.Global.getInt(mContext.getContentResolver(),
                Settings.Global.CAPTIVE_PORTAL_MODE, Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT)
                != Settings.Global.CAPTIVE_PORTAL_MODE_IGNORE;

使用此值mIsCaptivePortalCheckEnabled的地方为:

protected CaptivePortalProbeResult isCaptivePortal() {
        if (!mIsCaptivePortalCheckEnabled) {
            validationLog("Validation disabled.");
            return CaptivePortalProbeResult.SUCCESS;
        }

        URL pacUrl = null;
        URL httpsUrl = mCaptivePortalHttpsUrl;
        URL httpUrl = mCaptivePortalHttpUrl;
        ..................
}

再搜索mCaptivePortalHttpUrl:

mCaptivePortalHttpUrl = makeURL(getCaptivePortalServerHttpUrl(context));

再搜索getCaptivePortalServerHttpUrl方法:

public static String getCaptivePortalServerHttpUrl(Context context) {
    return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTP_URL, DEFAULT_HTTP_URL);
}

再搜索DEFAULT_HTTP_URL:

private static final String DEFAULT_HTTP_URL      =
            "http://connectivitycheck.gstatic.com/generate_204";

与MTK描述的一致,至此,问题解决。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 在启动后台 Python 代码的时候,Gunicorn 负责控制前端和后端的连接。如果在一段时间后前端无法正常访问,可能是由于以下原因引起的: 1. 网络问题:前端和后端的网络连接出现了问题,导致前端无法正常访问后端。可以尝试检查网络连接是否正常。 2. 内存泄漏:后台 Python 代码可能存在内存泄漏的问题,导致内存占用过高,最终导致无法响应前端请求。可以尝试使用工具对 Python 代码进行内存泄漏检测,并对问题进行修复。 3. Gunicorn 配置问题:Gunicorn 的配置可能存在问题,导致无法正常处理前端请求。可以尝试检查 Gunicorn 的配置文件是否正确,或者调整 Gunicorn 的参数以提高性能。 4. 后台 Python 代码问题:后台 Python 代码本身存在问题,导致无法正常处理前端请求。可以尝试对后台 Python 代码进行调试,查找问题所在,并进行修复。 针对以上问题,可以尝试对系统进行全面的诊断和调试,以确定问题的具体原因,并进行相应的修复。 ### 回答2: 出现前端无法正常访问的问题可能是由于gunicorn后台进程异常导致的。以下是可能的原因和解决方法: 1. 进程崩溃或异常退出:检查gunicorn进程是否正常运行,可以通过查看进程列表或日志来确认。如果进程异常退出,可以尝试重新启动gunicorn进程。 2. 端口冲突:确保gunicorn使用的端口没有被其他进程占用。可以使用netstat命令或类似工具检查端口使用情况,如果发现冲突,可以尝试更换一个未被占用的端口。 3. 资源耗尽:检查服务器的资源使用情况,例如内存和CPU占用率。如果资源不足,可能导致gunicorn无法正常处理请求。可以通过增加服务器资源或调整gunicorn的配置来解决该问题。 4. 网络问题:检查网络连接是否稳定,包括服务器和前端之间的网络连接。如果网络连接不稳定,可能导致前端无法正常访问。可以尝试重启网络设备或查看网络日志来解决该问题。 5. 代码问题:检查后台python代码是否存在bug或异常,可能导致gunicorn进程崩溃或无法正常处理请求。可以通过审查和调试代码来解决该问题。 综上所述,当gunicorn启动后台python代码后,前端无法正常访问可能是由于进程崩溃、端口冲突、资源耗尽、网络问题或代码问题引起的。需要通过检查进程状态、端口使用情况、服务器资源、网络连接和代码来辨识和解决具体问题。 ### 回答3: 当gunicorn启动后台Python代码以控制前端和后端的连接,但是过一段时间后,前端无法正常访问时,可能有以下几个问题和解决方案: 1. 连接断开:可能是由于网络连接问题,导致前端无法正常访问后端。可以通过检查网络连接是否正常,并尝试重新连接来解决。 2. 代码错误:可能是后台Python代码中存在BUG或异常,在一段时间后导致前端无法正常访问。可以通过查看日志文件或调试代码,排查错误并进行修复。 3. 资源耗尽:过一段时间后,如果后台Python代码占用过多的系统资源,可能会导致前端无法正常访问。可以通过优化代码,释放资源或增加系统资源来解决。 4. 进程崩溃:如果后台Python代码执行期间出现崩溃或异常终止,会导致前端无法继续访问。可以通过监控进程状态、自动重启或增加异常处理来解决。 5. 服务器负载过高:如果服务器负载过高,可能导致后台Python代码无法及时响应前端请求,从而导致访问问题。可以通过优化代码、增加服务器硬件资源或使用负载均衡来解决。 综上所述,排查问题时可以从连接、代码、资源、进程和服务器负载几个方面入手,通过逐一排查和解决问题,可以解决前端无法正常访问的问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hfreeman2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值