admin 管理员组文章数量: 887021
问题描述
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,如果有得到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/generate_204";
与MTK描述的一致,至此,问题解决。
版权声明:本文标题:那些我们解过的bug之WiFi连接后可以正常使用,但是提示已连接,但无法访问网络 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726799628h1030734.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论