Android连接可用WIFI后显示“Connected, no Internet”原因以及解决方案

本文解释了Android设备上出现“Connected,noInternet”的原因,这是由于“CaptivePortal”功能所致。文中详细介绍了CaptivePortal的概念,并提供了两种解决方法:一是修改检查上网状态的网址为国内可访问的地址;二是禁用CaptivePortal检查功能。

Android设备,连接可用的WiFi,提示“Connected, no Internet”怎么回事呢?(这个时候其实是可以上网的)

产生上面描述的这种现象是因为这个“Captive Portal”导致的。

Captive Portal 介绍

“Captive Portal “中文通常译作“强制主页”或“强制登录门户”。是一个登录Web页面,通常由网络运营商或网关在用户能够正常访问互联网之前拦截用户的请求并将一个强制登录或认证主页呈现(通常是通过浏览器)给用户。该页面可能要求用户输入认证信息、支付、接受某些条款或者其他用户授权等,随后用户才能被授权访问互联网。该技术广泛用于移动和个人宽带服务,包括有线电视、商业WiFi、家庭热点等,也可用于访问企业和住宅区有线网络。

作者:神农民
链接:https://www.jianshu.com/p/b4da31480f2c
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

那么Android是支持这个功能的。它的实现逻辑在NetWorkMonitor中。当一个网络连接建立时,系统将用该连接Ping一个Google的网站来判断该连接是否真的可以上网。我们知道,在大陆,有的网站是不能访问的,那么默认的Google的网站是不能正常访问的,导致能够连接上,能够访问网络,但是还是会提示”no Internet“。

下面结合代码进行简要的说明,和修改方法。

frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java

    // Default configuration values for captive portal detection probes.
    // TODO: append a random length parameter to the default HTTPS url.
    // TODO: randomize browser version ids in the default User-Agent String.
    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";

原生代码中提供的网址来判断是否正的可以上网。修改这个网址为在大陆可以访问的网址就可以修复这个问题。你可以试试。

还有一种修改方法:

frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
protected boolean mIsCaptivePortalCheckEnabled;

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


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

根据代码逻辑,通过一个标志位mIsCaptivePortalCheckEnabled来判断是否进行判断当前网络是否可以上网。那么可以将该flag设置为False即可解决这个问题了。

Line 7695: 03-29 20:49:34.614 2083 3479 W WifiService: Attempt to retrieve OsuProviders with invalid scanResult List Line 7799: 03-29 20:49:34.701 2083 3479 I WifiService: releaseMulticastLock uid=10118 tag=MdnsServiceBrowserImpl Line 8621: 03-29 20:49:35.635 2083 2889 D WifiClientModeManager[101700966:wlan0]: currentstate: ScanOnlyModeState Line 8622: 03-29 20:49:35.635 2083 2889 D WifiClientModeManager[101700966:wlan0]: Do not defer stop for non-internet providing CMMs Line 8623: 03-29 20:49:35.635 2083 2889 D WifiClientModeManager[101700966:wlan0]: The target role change info null Line 8624: 03-29 20:49:35.635 2083 2889 D WifiClientModeManager[101700966:wlan0]: Continue to stop wifi Line 8658: 03-29 20:49:35.652 27281 27297 I android.hardware.wifi-service-lazy: Adding interface handle for wlan0 Line 8659: 03-29 20:49:35.652 27281 27297 I android.hardware.wifi-service-lazy: Adding interface handle for p2p1 Line 8660: 03-29 20:49:35.652 27281 27297 I android.hardware.wifi-service-lazy: Adding interface handle for p2p0 Line 8662: 03-29 20:49:35.652 27281 27297 W android.hardware.wifi-service-lazy: No active wlan interfaces in use! Using default Line 8697: 03-29 20:49:35.668 27281 27297 D android.hardware.wifi-service-lazy: Stopping legacy HAL Line 8700: 03-29 20:49:35.668 27281 27445 I android.hardware.wifi-service-lazy: Legacy HAL stop complete callback received Line 8702: 03-29 20:49:35.668 27281 27445 D android.hardware.wifi-service-lazy: Legacy HAL event loop terminated Line 8703: 03-29 20:49:35.668 27281 27297 D android.hardware.wifi-service-lazy: Legacy HAL stop complete Line 8891: 03-29 20:49:35.816 27281 27297 I android.hardware.wifi-service-lazy: Wifi HAL stopped Line 8893: 03-29 20:49:35.817 2083 2889 I WifiVendorHal: Vendor Hal stopped Line 8894: 03-29 20:49:35.817 2083 2889 I WifiNative: Successfully torn down Iface:{Name=wlan0,Id=7,Type=STA_SCAN} Line 8896: 03-29 20:49:35.817 2083 2889 I WifiNative: Successfully initiated teardown for iface=wlan0 Line 8897: 03-29 20:49:35.817 2083 2889 I WifiClientModeManager[101700966:unknown]: StartedState.exit(), setting mRole = null Line 8980: 03-29 20:49:35.856 2083 2889 D WifiClientModeManager[101700966:unknown]: IdleState.exit() Line 9023: 03-29 20:49:35.884 2083 2889 I WifiService: Receive onDriverCountryCodeChanged to null, update available channel list Line 10345: 03-29 20:49:36.748 2083 2985 E OplusWifiHalServiceAidlImpl: IOplusWifiService.getFwStatus failed: java.lang.UnsupportedOperationException: 安卓手机WiFi为什么关闭后就开不了了
04-03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值