有没有办法访问Android的广播,WiFi连接目前是一个强大的门户网站(需要网络登录)? Android似乎确实内置了这个。如果不是广播接收器,有没有办法检查强制网络门户检查的结果?我相信它正在使用这个隐藏在API中的类:
在4.2之前,它可能正在使用:
背景:
我一直在使用自己的方法来检测WiFi是否需要登录。我会等待WiFi连接状态,然后ping一个站点并确保有响应。在大多数情况下,这似乎很有效。另一个策略是执行HttpRequest并检查重定向或您收到的响应主体,类似于上面列出的类中的Android策略。
然而,Lollipop 的新功能是当WiFi没有连接时使用移动数据连接。这意味着我的ping方法仍将返回结果,并且不会发生重定向,因为请求将通过移动数据进行路由。
有没有办法让Android获得WiFi强制门户的当前状态?如果没有,即使Android没有连接,我们是否可以确保请求通过WiFi?
答案 0 :(得分:3)
您必须使用新的ConnectivityManager.setProcessDefaultNetwork
API来强制您的应用通过强制网络门户进行通信。有关示例,请参阅https://github.com/pawitp/muwifi-autologin/commit/f045fe36f1fd98a106ea652e2d56f7ddfc871760。
添加完整代码:
final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
for (Network net : cm.getAllNetworks()) {
if (cm.getNetworkInfo(net).getType() == ConnectivityManager.TYPE_WIFI) {
Utils.logDebug(TAG, "Seting process network to " + net);
/*Since API 23 ConnectivityManager.setProcessDefaultNetwork(net);
is deprecated, use: */
cm.bindProcessToNetwork(net);
}
}