package com.zachklipp.captivate.util; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiManager; public final class WifiHelper { private static final String LOG_TAG = "WifiHelper"; public static boolean isWifiConnectedFromContext(Context context) { ConnectivityManager cManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo network = cManager.getActiveNetworkInfo(); boolean isWifiConnected = false; if (null != network) { Log.d(LOG_TAG, "Type = %s, isConnected() = %s", network.getType(), network.isConnected()); isWifiConnected = ConnectivityManager.TYPE_WIFI == network.getType() && network.isConnected(); } Log.d(LOG_TAG, "isWifiConnectedFromContext() = " + isWifiConnected); return isWifiConnected; } public static boolean isWifiFinishedConnectingOrDisconnecting(Intent intent) { boolean isFinished = false; Log.d(LOG_TAG, "isWifiFinishedConnectingOrDisconnecting(%s)", intent); isFinished = hasWifiNetworkConnectedOrDisconnected(intent) || hasWifiBeenDisabled(intent); Log.d(LOG_TAG, "isWifiFinishedConnectingOrDisconnecting() = " + isFinished); return isFinished; } public static boolean isWifiDisconnectedFromNetworkStateChangedIntent(Intent intent) { Log.d(LOG_TAG, "isWifiDisconnectedFromNetworkStateChangedIntent(%s)", intent); NetworkInfo networkInfo = null; if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); } return (networkInfo == null); } public static boolean isWifiConnectedFromNetworkStateChangedIntent(Intent intent) { Log.d(LOG_TAG, "isWifiConnectedFromNetworkStateChangedIntent(%s)", intent); NetworkInfo networkInfo = null; if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); } return (networkInfo != null && networkInfo.isConnected()); } @SuppressWarnings("incomplete-switch") private static boolean hasWifiNetworkConnectedOrDisconnected(Intent intent) { if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) { // Could also do with WifiManager.getWifiState(); NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); Log.d(LOG_TAG, "Wifi network state changed network info = " + networkInfo); if (networkInfo != null) { NetworkInfo.State state = networkInfo.getState(); Log.d(LOG_TAG, "Wifi state = " + state); switch (state) { case CONNECTED: case DISCONNECTED: case SUSPENDED: return true; } } else { Log.d(LOG_TAG, "No wifi network info"); } } return false; } private static boolean hasWifiBeenDisabled(Intent intent) { if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) { // Could also be done with !WifiManager.isConnected() maybe // This will always be present, default value doesn't matter int currState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0); Log.d(LOG_TAG, "Wifi enabled state = " + currState); // This one may not be present int prevState = intent.getIntExtra( WifiManager.EXTRA_PREVIOUS_WIFI_STATE, WifiManager.WIFI_STATE_DISABLING); return (currState == WifiManager.WIFI_STATE_DISABLED && prevState == WifiManager.WIFI_STATE_DISABLING); } return false; } private WifiHelper() { } }