package org.xbmc.android.util; import java.util.List; import org.xbmc.api.object.Host; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.wifi.WifiManager.WifiLock; import android.util.Log; public class WifiHelper { public static final String TAG = "WifiHelper"; /** * WiFi is disabled or disabling */ public static final int WIFI_STATE_DISABLED = WifiManager.WIFI_STATE_DISABLED; /** * Wifi is enabled but not connected */ public static final int WIFI_STATE_ENABLED = WifiManager.WIFI_STATE_ENABLED; /** * There was an error enabling or disabling WiFi... */ public static final int WIFI_STATE_UNKNOWN = WifiManager.WIFI_STATE_UNKNOWN; /** * WiFi is enabled and connected. */ public static final int WIFI_STATE_CONNECTED = 5; public static final String WIFI_LOCK_TAG = "org.xbmc.android.remote.wifi.lock"; private WifiManager.WifiLock mWifiLock = null; private final WifiManager mManager; private final ConnectivityManager mConnectivityManager; private static WifiHelper mInstance = null; private WifiHelper(Context context) { this.mManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); this.mConnectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); mInstance = this; } public static WifiHelper getInstance(Context context) { if(mInstance == null) new WifiHelper(context); return mInstance; } public void connect(final Host host) { Log.d(TAG, "trying to connect to AP:" + host.access_point); final List<WifiConfiguration> hosts = mManager.getConfiguredNetworks(); int networkId = -1; for(WifiConfiguration conf : hosts) { Log.d(TAG, "trying host:" + conf.SSID); if(conf.SSID.equalsIgnoreCase("\"" + host.access_point+ "\"")) { networkId = conf.networkId; Log.d(TAG, "found hosts AP in Android with ID:" + networkId); break; } } mManager.enableNetwork(networkId, true); } public void enableWifi(final boolean b) { mManager.setWifiEnabled(b); } public void aquireWifiLock() { if(mWifiLock == null) { Log.d(TAG, "creating new WifiLock"); mWifiLock = mManager.createWifiLock(WifiManager.WIFI_MODE_FULL,WIFI_LOCK_TAG); } if(!mWifiLock.isHeld()) { Log.d(TAG, "aquiring WifiLock"); mWifiLock.acquire(); } } public WifiLock getNewWifiLock(String lock_postfix) { return mManager.createWifiLock(WifiManager.WIFI_MODE_FULL, WIFI_LOCK_TAG + lock_postfix); } public void releaseWifiLock() { if(mWifiLock != null && mWifiLock.isHeld()) { Log.d(TAG, "releasing WifiLock"); mWifiLock.release(); } } public int getWifiState() { switch (mManager.getWifiState()) { case WifiManager.WIFI_STATE_UNKNOWN: Log.d(TAG, "WIFI_STATE_UNKOWN"); return WIFI_STATE_UNKNOWN; case WifiManager.WIFI_STATE_DISABLED: case WifiManager.WIFI_STATE_DISABLING: Log.d(TAG, "WIFI_STATE_DISABLED"); return WIFI_STATE_DISABLED; case WifiManager.WIFI_STATE_ENABLING: case WifiManager.WIFI_STATE_ENABLED: final WifiInfo info = mManager.getConnectionInfo(); if(info != null && info.getSSID() != null) { Log.d(TAG, "WIFI_STATE_CONNECTED to " + info.getSSID()); final NetworkInfo mWifi = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWifi.isConnected()) { return WIFI_STATE_CONNECTED; } } Log.d(TAG, "WIFI_STATE_ENABLED"); return WIFI_STATE_ENABLED; } return -1; } }