package com.mobile.mobilehardware.battery; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.BatteryManager; import android.util.Log; import com.mobile.mobilehardware.base.BaseData; import com.mobile.mobilehardware.utils.DoubleUtil; import org.json.JSONObject; /** * @author 谷闹年 * @date 2018/1/5 */ class BatteryInfo { private static final String TAG = BatteryInfo.class.getSimpleName(); @SuppressLint("PrivateApi") private static String getBatteryCapacity(Context context) { Object mPowerProfile; double batteryCapacity = 0; final String powerProfileClass = "com.android.internal.os.PowerProfile"; try { mPowerProfile = Class.forName(powerProfileClass) .getConstructor(Context.class) .newInstance(context); batteryCapacity = (double) Class.forName(powerProfileClass) .getMethod("getBatteryCapacity") .invoke(mPowerProfile); } catch (Exception e) { Log.e(TAG, e.toString()); } return batteryCapacity + "mAh"; } static JSONObject getBattery(Context context) { BatteryBean batteryBean = new BatteryBean(); try { Intent batteryStatus = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); if (batteryStatus != null) { int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); double batteryLevel = -1; if (level != -1 && scale != -1) { batteryLevel = DoubleUtil.divide((double) level, (double) scale); } // unknown=1, charging=2, discharging=3, not charging=4, full=5 int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); // ac=1, usb=2, wireless=4 int plugState = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); // unknown=1, good=2, overheat=3, dead=4, over voltage=5, unspecified failure=6, cold=7 int health = batteryStatus.getIntExtra(BatteryManager.EXTRA_HEALTH, -1); boolean present = batteryStatus.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false); String technology = batteryStatus.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY); int temperature = batteryStatus.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1); int voltage = batteryStatus.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1); batteryBean.setBr(DoubleUtil.mul(batteryLevel,100d)+ "%"); batteryBean.setStatus(batteryStatus(status)); batteryBean.setPlugState(batteryPlugged(plugState)); batteryBean.setHealth(batteryHealth(health)); batteryBean.setPresent(present); batteryBean.setTechnology(technology); batteryBean.setTemperature(temperature / 10 + "℃"); if (voltage > 1000) { batteryBean.setVoltage(voltage / 1000f + "V"); } else { batteryBean.setVoltage(voltage + "V"); } batteryBean.setPower(getBatteryCapacity(context)); } } catch (Exception e) { Log.e(TAG, e.toString()); } return batteryBean.toJSONObject(); } private static String batteryHealth(int health) { String healthBat = BaseData.UNKNOWN_PARAM; switch (health) { case BatteryManager.BATTERY_HEALTH_COLD: healthBat = "cold"; break; case BatteryManager.BATTERY_HEALTH_DEAD: healthBat = "dead"; break; case BatteryManager.BATTERY_HEALTH_GOOD: healthBat = "good"; break; case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: healthBat = "overVoltage"; break; case BatteryManager.BATTERY_HEALTH_OVERHEAT: healthBat = "overheat"; break; case BatteryManager.BATTERY_HEALTH_UNKNOWN: healthBat = "unknown"; break; case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: healthBat = "unspecified"; break; default: break; } return healthBat; } private static String batteryStatus(int status) { String healthBat = BaseData.UNKNOWN_PARAM; switch (status) { case BatteryManager.BATTERY_STATUS_CHARGING: healthBat = "charging"; break; case BatteryManager.BATTERY_STATUS_DISCHARGING: healthBat = "disCharging"; break; case BatteryManager.BATTERY_STATUS_FULL: healthBat = "full"; break; case BatteryManager.BATTERY_STATUS_NOT_CHARGING: healthBat = "notCharging"; break; case BatteryManager.BATTERY_STATUS_UNKNOWN: healthBat = "unknown"; break; default: break; } return healthBat; } private static String batteryPlugged(int status) { String healthBat = BaseData.UNKNOWN_PARAM; switch (status) { case BatteryManager.BATTERY_PLUGGED_AC: healthBat = "ac"; break; case BatteryManager.BATTERY_PLUGGED_USB: healthBat = "usb"; break; case BatteryManager.BATTERY_PLUGGED_WIRELESS: healthBat = "wireless"; break; default: break; } return healthBat; } }