Правильный способ проверить, если Wi-Fi подключен в Android

Для моего приложения я должен убедиться, что пользователь подключен к Wi-Fi, прежде чем связаться с сервером. Я нашел два способа сделать это, но я не уверен, достаточно ли одного.

Сначала я добавляю это:

WifiManager wifiManager = (WifiManager) getActivity().getApplicationContext()
            .getSystemService(WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
        buildAlertNoWifi();
        showProgressDialog(false, "");
        return;
}

И тогда я делаю это:

ConnectivityManager cm = (ConnectivityManager) getActivity()
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null) { // connected to the internet
        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
            // connected to wifi

        } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
            // connected to the mobile provider's data plan
            Toast.makeText(getContext(), "Make sure you connect to wifi.", Toast.LENGTH_LONG).show();
            return;
        }
    } else {
        Toast.makeText(getContext(), "Make sure you connect to wifi.", Toast.LENGTH_LONG).show();
        return;
    }

Так что мне было интересно, если wifiManager.isWifiEnabled() Возвращает ли устройство подключено к Wi-Fi или просто включен Wi-Fi. И если так, достаточно ли использовать его в одиночку?

2 ответа

Лучшая практика

public boolean isWifiConnected() {
    NetworkInfo net = getActiveNetworkInfo();
    return (isConnected(net) && net.getType() == TYPE_WIFI);
}

private NetworkInfo getActiveNetworkInfo() {
    ConnectivityManager connManager = (ConnectivityManager) MagazineApplication.getContext()
            .getSystemService(MagazineApplication.CONNECTIVITY_SERVICE);
    return connManager.getActiveNetworkInfo();
}

Я верю WifiManager.isWifiEnabled() только проверяет, включен ли Wi-Fi устройства. Пожалуйста, используйте NetworkInfo.isConnected() или же NetworkInfo.isConnectedOrConnecting() чтобы проверить, подключен ли он к какой-либо сети.

Я считаю, что это должно работать,

   public boolean isWifiConnected()
    {
        ConnectivityManager cm = (ConnectivityManager)this.mContext.getSystemService(Context.CONNECTIVITY_SERVICE);

        return (cm != null) && (cm.getActiveNetworkInfo() != null) &&
                (cm.getActiveNetworkInfo().getType() == 1);
    }
Другие вопросы по тегам