Android 6.0检查是否连接到Wi-Fi(没有Internet)

时间:2015-11-10 10:11:51

标签: android wifi

以下是检查Android设备是否连接到Wi-Fi网络的方法:

NetworkInfo info = ((ConnectivityManager) ctx.getSystemService(Context
         .CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isWifiConnected = info != null && info.isAvailable() && info.isConnected();

这适用于Android 6.0之前的所有版本。 但是,在Android 6.0上,如果设备连接到无法访问Internet的Wi-Fi,则info.isConnected()将返回false。

那么,我怎么能确定该设备已连接到Android 6.0上的Wi-Fi?

2 个答案:

答案 0 :(得分:3)

对于Android 5.0及更高版本,您需要使用其他API来检查设备是否已连接到WiFi网络。该设备也可能同时连接到移动网络。

ConnectivityManager connectivityManager = ((ConnectivityManager) ctx.getSystemService
                (Context.CONNECTIVITY_SERVICE));
        boolean isWifiConnected = false;
        Network[] networks = connectivityManager.getAllNetworks();
        if (networks == null) {
            isWifiConnected = false;
        } else {
            for (Network network : networks) {
                NetworkInfo info = connectivityManager.getNetworkInfo(network);
                if (info != null && info.getType() == ConnectivityManager.TYPE_WIFI) {
                    if (info.isAvailable() && info.isConnected()) {
                        isWifiConnected = true;
                        break;
                    }
                }
            }
        }
        return isWifiConnected;

答案 1 :(得分:2)

我有同样的问题。您可以检查是否存在SSID,这意味着连接:

WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager.getConnectionInfo() != null) {
    String ssid = wifiManager.getConnectionInfo().getSSID();
}

系统正在将流量路由到小区连接,因此操作系统将Wi-Fi网络报告为已断开连接。 Android 6.0改变了底层路由逻辑,以避免没有互联网的Wi-Fi连接。这就是为什么connectivityManager.getActiveNetworkInfo()如果存在活动的蜂窝数据连接,则不再为没有互联网的Wi-Fi连接返回NetworkInfo的原因。

似乎ConnectivityManager.bindProcessToNetwork(网络网络)就是告诉操作系统更喜欢一个网络而不是另一个网络。