Android_优化电池寿命01_监控电池电量和充电状态
监控电池电量和充电状态
官方文档: https://developer.android.com/training/monitoring-device-state/battery-monitoring?hl=zh-cn
public class MainActivity extends BaseActivity { private PowerStatusReceiver powerStatusReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); powerStatusReceiver = new PowerStatusReceiver(); registerReceiver(powerStatusReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(powerStatusReceiver); } /** * 电量状态receiver */ private final class PowerStatusReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { /** * 电池状态: * 代码:1 BATTERY_STATUS_UNKNOWN 未知 * 代码:2 BATTERY_STATUS_CHARGING 充电 * 代码:3 BATTERY_STATUS_DISCHARGING 放电 * 代码:4 BATTERY_STATUS_NOT_CHARGING 不充电 * 代码:5 BATTERY_STATUS_FULL 已满 */ int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); /** * 充电设备: * 代码:1 BATTERY_PLUGGED_AC 交流充电器 * 代码:2 BATTERY_PLUGGED_USB USB * 代码:4 BATTERY_PLUGGED_WIRELESS 无线 */ int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPercent = level / (float) scale; JSONObject jsonObject = new JSONObject(); try { jsonObject.put("电池状态", status); jsonObject.put("充电设备", chargePlug); jsonObject.put("电池电量", level); jsonObject.put("电池刻度", scale); jsonObject.put("电池百分比", String.valueOf(batteryPercent * 100) + "%"); } catch (JSONException e) { e.printStackTrace(); } Logger.json(jsonObject.toString()); } } } }
一般而言,持续监控电池电量对电池的影响大于对应用正常行为的影响,因此最好只监控显著的电池电量变化,特别是在设备进入或退出电量不足状态时。
浙公网安备 33010602011771号