На самом деле вы проверяете, включен ли Wi-Fi , это не обязательно означает, что он подключен .Это просто означает, что режим Wi-Fi на телефоне включен и может подключаться к сетям Wi-Fi.
Вот как я слушаю фактические соединения Wi-Fi в моем Broadcast Receiver:
public class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMan.getActiveNetworkInfo();
if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI)
Log.d("WifiReceiver", "Have Wifi Connection");
else
Log.d("WifiReceiver", "Don't have Wifi Connection");
}
};
Чтобы получить доступ к информации об активной сети, вам необходимо добавить следующее разрешение на использование в ваш AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
и следующий получатель намерений (или вы можете добавить это программно...)
<!-- Receive Wi-Fi connection state changes -->
<receiver android:name=".WifiReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
РЕДАКТИРОВАТЬ: В Lollipop, планирование работы может помочь, если вы хотите выполнить действие, когда пользователь подключается к неизмеренному сетевому соединению.Взгляните: http://developer.android.com/about/versions/android-5.0.html#Power
РЕДАКТИРОВАТЬ 2: Другое соображение заключается в том, что мой ответ не проверяет, что у вас есть подключение к Интернету .Возможно, вы подключены к сети Wi-Fi, для которой требуется войти. Вот полезная проверка «IsOnline ()»: https://stackoverflow.com/a/27312494/1140744