gpt4 book ai didi

android - 如何知道连接的 WiFi 是 Walled Gardened (Captive Portal)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:56:00 24 4
gpt4 key购买 nike

我知道有一种方法可以通过检查类似 "http://clients3.google.com/generate_204" 的响应来确定 WiFi 网络是否为强制门户。

但我的问题有些不同。我们都知道,在 Android 上,当我们连接到 WiFi 网络时,连接周期会经历类 NetworkInfo.DetailedState 中提到的许多状态。 , 像 AUTHENTICATING, OBTAINING_IPADDR, VERIFYING_POOR_LINK 等。另外,其中一个状态是 CAPTIVE_PORTAL_CHECK 和 android 系统检查是否正在连接的网络是否被俘虏。为此 Android 使用 CaptivePortalTracker#isCaptivePortal(InetAddress server)结果是 boolean。所以我们确定 Android 知道连接是否受限(强制)

所以,我的问题是,Android 系统是否会提供一些回调或某种状态,让我们无需手动检查即可知道网络是强制门户?由于 Android 系统已经检查了网络强制门户,我们需要再次做同样的事情吗?

附言我只针对 API 19 (KitKat 4.4.2)。

最佳答案

您可以从网络获取网络能力并检查它是否具有 NET_CAPABILITY_CAPTIVE_PORTAL :

API 23

ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
Network activeNetwork=connectivityManager.getActiveNetwork();
NetworkCapabilities networkCapabilities=connectivityManager.getNetworkCapabilities(activeNetwork);
if(networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL)){
//DO SOMETHING
}

http://developer.android.com/intl/es/reference/android/net/NetworkCapabilities.html

NetworkCapabilities 是在 API 21 中引入的,所以你可以这样做

API >= 21

ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
Network[] activeNetworks=connectivityManager.getAllNetworks();
for(Network network:activeNetworks){
if(connectivityManager.getNetworkInfo(network).isConnected()){
NetworkCapabilities networkCapabilities=connectivityManager.getNetworkCapabilities(network);
if(networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL)){
//DO SOMETHING
}
break;
}
}

关于android - 如何知道连接的 WiFi 是 Walled Gardened (Captive Portal)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34576138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com