package com.num.utils; import java.io.IOException; import java.io.RandomAccessFile; import com.num.Values; import com.num.models.Battery; import com.num.models.Device; import com.num.models.Measurement; import android.app.ActivityManager; import android.app.ActivityManager.MemoryInfo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.BatteryManager; import android.os.Bundle; import android.util.Log; public class BatteryUtil { Context context=null; Battery battery = null; boolean notDone = false; public String getBattery(Context context,Measurement measurement){ this.context = context; battery = new Battery(); measurement.setBattery(battery); registerBatteryLevelReceiver(this.context); Values session = (Values) context.getApplicationContext(); notDone = true; while(notDone){ try { Thread.sleep(session.SHORT_SLEEP_TIME); } catch (InterruptedException e) { e.printStackTrace(); } } try{ context.unregisterReceiver(battery_receiver); } catch (Exception e) { } return ""; } private BroadcastReceiver battery_receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { boolean isPresent = intent.getBooleanExtra("present", false); String technology = intent.getStringExtra("technology"); int plugged = intent.getIntExtra("plugged", -1); int scale = intent.getIntExtra("scale", -1); int health = intent.getIntExtra("health", 0); int status = intent.getIntExtra("status", 0); int rawlevel = intent.getIntExtra("level", -1); int temperature = intent.getIntExtra("temperature", -1); int voltage = intent.getIntExtra("voltage", 0); int level = 0; Bundle bundle = intent.getExtras(); Log.i("BatteryLevel", bundle.toString()); if(isPresent) { if (rawlevel >= 0 && scale > 0) { level = (rawlevel * 100) / scale; } } battery.setPlugged(plugged); battery.setTechnology(technology); battery.setHealth(health); battery.setLevel(level); battery.setScale(scale); battery.setPresent(isPresent); battery.setTemperature(temperature); battery.setVoltage(voltage); battery.setStatus(status); notDone = false; //context.unregisterReceiver(battery_receiver); } }; private void registerBatteryLevelReceiver(Context context){ IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); try{ context.registerReceiver(battery_receiver, filter); } catch(Exception e){ context.unregisterReceiver(battery_receiver); context.registerReceiver(battery_receiver, filter); } } public String batteryStatus(int v){ switch (v){ case BatteryManager.BATTERY_STATUS_CHARGING: return "Charging"; case BatteryManager.BATTERY_STATUS_DISCHARGING: return "OK"; case BatteryManager.BATTERY_STATUS_FULL: return "Full"; case BatteryManager.BATTERY_STATUS_NOT_CHARGING: return "OK"; } return "Unknown"; } public String batteryHealth(int v){ switch (v){ case BatteryManager.BATTERY_HEALTH_DEAD: return "Dead"; case BatteryManager.BATTERY_HEALTH_GOOD: return "Good"; case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: return "Over Voltage"; case BatteryManager.BATTERY_HEALTH_OVERHEAT: return "Over Heat"; case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: return "Failure"; } return "Unknown"; } public String batteryPlugged(int v){ switch (v){ case BatteryManager.BATTERY_PLUGGED_AC: return "Plugged AC"; case BatteryManager.BATTERY_PLUGGED_USB: return "Plugged USB"; } return "Not Plugged"; } }