【发布时间】:2017-05-22 21:01:53
【问题描述】:
我有一些应用程序,用户通常每天花费很长时间,它还执行一些后台工作、通知、警报等。 我想确保在添加一些新功能后它不会过多地消耗电池。
是否可以在用户设备上收集我的应用电池使用数据?
我知道自 android 5.1 以来通过 ADB 添加了一些功能,但是否可以通过编程方式完成? 也许是一些间接的方式,比如我的应用程序的 CPU 时间、活动屏幕和 wifi 使用情况?
【问题讨论】:
标签: android
我有一些应用程序,用户通常每天花费很长时间,它还执行一些后台工作、通知、警报等。 我想确保在添加一些新功能后它不会过多地消耗电池。
是否可以在用户设备上收集我的应用电池使用数据?
我知道自 android 5.1 以来通过 ADB 添加了一些功能,但是否可以通过编程方式完成? 也许是一些间接的方式,比如我的应用程序的 CPU 时间、活动屏幕和 wifi 使用情况?
【问题讨论】:
标签: android
没有你想要的德普, 实际上,您无法知道哪个应用正在耗尽设备电池,您只能了解有关电池充电状态的详细信息。
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_CAPACITY 和BATTERY_PROPERTY_CHARGE_COUNTER,它们不需要广播接收器。但我真正想要的 - 来自电池使用设置的值 - CPU total 和 Computed power use