package at.univie.sensorium.sensors; import java.io.PrintWriter; import java.io.StringWriter; import java.math.BigInteger; import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.ByteOrder; import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; import android.util.Log; import at.univie.sensorium.SensorRegistry; public class WifiConnectionSensor extends AbstractSensor { private WifiManager mainWifi; private SensorValue ssid; private SensorValue ssid_hidden; private SensorValue bssid; private SensorValue ip; private SensorValue mac; private SensorValue supplicant_state; private SensorValue rssi; private SensorValue speed; private Handler handler = new Handler(); //private SensorValue sConnectedAP; String AP = ""; // the AP that is connected to private int scan_interval = 10; // sec public WifiConnectionSensor(){ super(); setName("Wifi Connections"); ssid = new SensorValue(SensorValue.UNIT.STRING, SensorValue.TYPE.SSID); ssid_hidden = new SensorValue(SensorValue.UNIT.OTHER, SensorValue.TYPE.SSID_HIDDEN); bssid = new SensorValue(SensorValue.UNIT.STRING, SensorValue.TYPE.BSSID); ip = new SensorValue(SensorValue.UNIT.STRING, SensorValue.TYPE.DEVICE_IP); mac = new SensorValue(SensorValue.UNIT.STRING, SensorValue.TYPE.MAC_ADDRESS); supplicant_state = new SensorValue(SensorValue.UNIT.STRING, SensorValue.TYPE.STATE); rssi = new SensorValue(SensorValue.UNIT.DBM, SensorValue.TYPE.SIGNALSTRENGTH); speed = new SensorValue(SensorValue.UNIT.MBPS,SensorValue.TYPE.SPEED); //sConnectedAP = new SensorValue(SensorValue.UNIT.STRING, SensorValue.TYPE.WIFI_CONNECTION); } private Runnable scanTask = new Runnable() { @Override public void run() { mainWifi = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE); WifiInfo info = mainWifi.getConnectionInfo(); // the network that Android is connected to ssid.setValue(info.getSSID()); ssid_hidden.setValue(info.getHiddenSSID()); bssid.setValue(info.getBSSID()); int addr = info.getIpAddress(); if (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) { addr = Integer.reverseBytes(addr); } byte[] ipByteArray = BigInteger.valueOf(addr).toByteArray(); try { ip.setValue(InetAddress.getByAddress(ipByteArray).getHostAddress()); } catch (UnknownHostException e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); Log.d(SensorRegistry.TAG, sw.toString()); } mac.setValue(info.getMacAddress()); supplicant_state.setValue(info.getSupplicantState()); rssi.setValue(info.getRssi()); speed.setValue(info.getLinkSpeed()); // List<WifiConfiguration> configs = mainWifi.getConfiguredNetworks(); // for (WifiConfiguration config : configs) { // AP += "\n" + config.toString(); // } // SensorRegistry.getInstance().log("WiFi", AP); // sConnectedAP.setValue(AP); notifyListeners(); handler.postDelayed(this, scan_interval*1000); } }; @Override protected void _enable() { handler.postDelayed(scanTask, 0); } @Override protected void _disable() { handler.removeCallbacks(scanTask); //notifyListeners(); } // private String getSupplicantStateString(SupplicantState s){ // // } }