package com.num.utils; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.ScanResult; import android.net.wifi.SupplicantState; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import com.num.Values; import com.num.activities.RunActivity.MeasurementListener; import com.num.models.Wifi; import com.num.models.WifiNeighbor; import com.num.models.WifiPreference; import com.num.utils.NeighborWifiUtil.NeighborResult; public class WifiUtil { boolean notDone = false; boolean isWIFI = false; Wifi wifi; public Wifi getWifi(Context context) { Values session = (Values) context.getApplicationContext(); wifi = getWifiDetail(context); while(notDone){ try { Thread.sleep(session.SHORT_SLEEP_TIME); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } NeighborWifiUtil neighborWifiUtil = new NeighborWifiUtil(); neighborWifiUtil.getNeighborWifi(context,neighborResult ); if (isWIFI) { notDone = true; } while(notDone){ try { Thread.sleep(session.SHORT_SLEEP_TIME); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return wifi; } public NeighborResult neighborResult = new NeighborResult(){ @Override public void gotNeighbor(List<ScanResult> wifiList){ try{ ArrayList<WifiNeighbor> neighbors = new ArrayList<WifiNeighbor>(); ArrayList<WifiPreference> prefers = wifi.getPreference(); for (int i = 0; i < wifiList.size(); i++) { WifiNeighbor n = new WifiNeighbor(); String bssid = wifiList.get(i).BSSID; String capability = wifiList.get(i).capabilities; int frequency = wifiList.get(i).frequency; int signalLevel = wifiList.get(i).level; String ssid = wifiList.get(i).SSID; n.setCapability(capability); n.setMacAddress(bssid); n.setFrequency(frequency); n.setSignalLevel(signalLevel); n.setSSID(ssid); n.setPreferred(false); if (ssid.equalsIgnoreCase(wifi.getSsid())) { n.setConnected(true); } else { n.setConnected(false); } for (int j = 0; j < prefers.size(); j++) { if (ssid.equalsIgnoreCase(prefers.get(j).getSsid())) { n.setPreferred(true); break; } } neighbors.add(n); } wifi.setNeighbors(neighbors); notDone = false; } catch (Exception e) { e.printStackTrace(); } } }; public Wifi getWifiDetail(Context context) { String service = Context.CONNECTIVITY_SERVICE; ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(service); NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo(); isWIFI = false; Wifi wifiDetail = new Wifi(); if (activeNetwork == null) { isWIFI = false; } else { int connectionType = activeNetwork.getType(); switch (connectionType) { case (ConnectivityManager.TYPE_MOBILE) : isWIFI = false; break; case (ConnectivityManager.TYPE_WIFI) : isWIFI = true; break; default: break; } } wifiDetail.setWifi(isWIFI); if (!isWIFI) { notDone = false; return wifiDetail; } else { String srvc = Context.WIFI_SERVICE; WifiManager wifi = (WifiManager)context.getSystemService(srvc); WifiInfo info = wifi.getConnectionInfo(); if (info.getBSSID() != null) { int strength = WifiManager.calculateSignalLevel(info.getRssi(), 11); int ipAddress = info.getIpAddress(); int speed = info.getLinkSpeed(); int networkId = info.getNetworkId(); int rssi = info.getRssi(); String macAddress = info.getMacAddress(); String ssid = info.getSSID(); //ssid = ssid.substring(1, ssid.length() - 1); SupplicantState supState = info.getSupplicantState(); String detailedInfo = supState.toString(); String units = WifiInfo.LINK_SPEED_UNITS; //String cSummary = String.format("Connected to %s at %s%s. Strength %s", ssid, speed, units, strength); wifiDetail.setDetailedInfo(detailedInfo); wifiDetail.setIpAddress(ipAddress); wifiDetail.setMacAddress(macAddress); wifiDetail.setNetworkId(networkId); wifiDetail.setRssi(rssi); wifiDetail.setSpeed(speed); wifiDetail.setSsid(ssid); wifiDetail.setStrength(strength); wifiDetail.setUnits(units); wifiDetail.setPreferred(false); } // List available networks ArrayList<WifiPreference> preference = new ArrayList<WifiPreference>(); List<WifiConfiguration> configs = wifi.getConfiguredNetworks(); for (int i = 0; i < configs.size(); i++) { WifiPreference wifiPref = new WifiPreference(); String ssid = configs.get(i).SSID; ssid = ssid.substring(1, ssid.length() - 1); if (ssid.equalsIgnoreCase(wifiDetail.getSsid())) { wifiPref.setConnected(true); wifiDetail.setPreferred(true); } else { wifiPref.setConnected(false); } String authAlgorithm = configs.get(i).allowedAuthAlgorithms.toString(); String groupCiphers = configs.get(i).allowedGroupCiphers.toString(); String pairwiseCiphers = configs.get(i).allowedPairwiseCiphers.toString(); String protocols = configs.get(i).allowedProtocols.toString(); String bssid = configs.get(i).BSSID; int networkid = configs.get(i).networkId; int priority = configs.get(i).priority; int status = configs.get(i).status; wifiPref.setAuthAlgorithms(authAlgorithm); wifiPref.setBssid(bssid); wifiPref.setGroupCiphers(groupCiphers); wifiPref.setPairwiseCiphers(pairwiseCiphers); wifiPref.setPriority(priority); wifiPref.setSsid(ssid); wifiPref.setProtocols(protocols); wifiPref.setNetworkid(networkid); wifiPref.setStatus(status); preference.add(wifiPref); } wifiDetail.setPreference(preference); } notDone = false; return wifiDetail; } }