Правильный способ проверить, если 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);
}