Lollipop Bad WiFi连接和回退到移动网络,如何检测?

时间:2014-12-10 16:09:01

标签: java android android-5.0-lollipop

棒棒糖有一个新功能,这对我来说是一个巨大的问题。当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连接强制数据包,而且我还没弄清楚我是否可以检测到这种状态。除了检测移动数据是否打开,并要求用户将其关闭外,我有哪些选择?

1 个答案:

答案 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。