Ana*_*eem 8 networking android captivenetwork
我知道有办法通过检查类似的响应,找出WiFi网络是否是一个强大的门户网站"http://clients3.google.com/generate_204".
但我的问题有些不同.我们都知道,在Android上,当我们连接到WiFi网络的连接周期经历了许多在课堂上提到的状态NetworkInfo.DetailedState,像AUTHENTICATING,OBTAINING_IPADDR,VERIFYING_POOR_LINK等等.另外,美国的一个是CAPTIVE_PORTAL_CHECK和android系统检查是否网络,被连接是否被俘.对于这个Android,使用CaptivePortalTracker#isCaptivePortal(InetAddress服务器),结果是boolean.因此,我们确信Android知道连接是否受限制(俘虏)
所以,我的问题是Android系统是否提供了一些回调或某种状态,通过这种状态,我们可以了解网络是强制网络门户而无需手动检查?由于Android系统已经检查了网络的强制门户,我们是否需要再次做同样的事情?
PS我只针对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
}
Run Code Online (Sandbox Code Playgroud)
http://developer.android.com/intl/es/reference/android/net/NetworkCapability.html
NetworkCapability 是在 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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1467 次 |
| 最近记录: |