棒棒糖有一个新功能,这对我来说是一个巨大的问题。当WiFi网络“连接”但没有互联网时,系统将透明地回退到移动数据。 http://www.androidpolice.com/2014/10/18/lollipop-feature-spotlight-android-now-defaults-to-mobile-data-when-wi-fi-has-no-internet-access-signal-icon-adds-a-for-no-connection/
由于我为公司制作的应用程序之一是WiFi测试应用程序,类似于Fing等,这导致Lollipop出现问题。我需要在坏的WiFi信号上发送数据包,以便找到并修复问题,例如Traceroute,Ping等。虽然外部IP可能无法正常工作,但在这种情况下仍然可以访问内部IP地址。但是,如果连接自动回落到移动网络,则不再可能。
我还没有找到任何检测方法。 NetworkInfo.getState()
和NetworkInfo.getDetailedState()
报告“已连接”,即使WiFi已连接且外部连接错误也是如此。有没有人有什么建议?到目前为止的所有研究都让我相信我不能通过Android中的WiFi连接强制数据包,而且我还没弄清楚我是否可以检测到这种状态。除了检测移动数据是否打开,并要求用户将其关闭外,我有哪些选择?
答案 0 :(得分:1)
您可以使用ConnectivityManager#requestNetwork()
请求特定的连接类型(或特定网络)。
然后,您可以使用NetworkRequest.Builder
来申请WiFi网络,如下所示:
ConnectivityManager cm =
(ConnectivityManager) Context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build();
cm.requestNetwork(request,
new ConnectivityManager.NetworkCallback() {
void onAvailable(Network network) {
// Do something once the network is available
}
});
构建器还允许您指定附加约束(称为“功能”),因此您可以选择指定更多要求,例如特定SSID。