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());
            }
        }
    }
}

 

一般而言,持续监控电池电量对电池的影响大于对应用正常行为的影响,因此最好只监控显著的电池电量变化,特别是在设备进入或退出电量不足状态时。

 

posted on 2018-01-18 13:58  JonSnows  阅读(338)  评论(0)    收藏  举报

导航