【问题标题】:Detect battery drain programmatically以编程方式检测电池消耗
【发布时间】:2017-05-22 21:01:53
【问题描述】:

我有一些应用程序,用户通常每天花费很长时间,它还执行一些后台工作、通知、警报等。 我想确保在添加一些新功能后它不会过多地消耗电池。

是否可以在用户设备上收集我的应用电池使用数据?

我知道自 android 5.1 以来通过 ADB 添加了一些功能,但是否可以通过编程方式完成? 也许是一些间接的方式,比如我的应用程序的 CPU 时间、活动屏幕和 wi​​fi 使用情况?

【问题讨论】:

    标签: android


    【解决方案1】:

    没有你想要的德普, 实际上,您无法知道哪个应用正在耗尽设备电池,您只能了解有关电池充电状态的详细信息。

    BatteryManager 在包含充电状态的粘性 Intent 中广播所有电池和充电详细信息。

    IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    Intent batteryStatus = context.registerReceiver(null, ifilter);
    

    您可以提取当前的充电状态,如果设备正在充电,无论是通过 USB 还是交流充电器充电:

    // Are we charging / charged?
    int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
    boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                         status == BatteryManager.BATTERY_STATUS_FULL;
    
    // How are we charging?
    int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
    boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
    boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
    

    所有细节都在这里:https://developer.android.com/training/monitoring-device-state/battery-monitoring.html

    【讨论】:

    • 谢谢,我发现了更有用的BatteryManager 方法BATTERY_PROPERTY_CAPACITYBATTERY_PROPERTY_CHARGE_COUNTER,它们不需要广播接收器。但我真正想要的 - 来自电池使用设置的值 - CPU totalComputed power use
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多