You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用电池用量监测开发:如何获取指定时段应用耗电数据?

可行实现思路
  • Android 8.0+ 依赖系统公开API
    从Android 8.0(API 26)开始,系统开放了BatteryStatsManager和UsageStatsManager的官方接口,完全支持分应用的电池统计:

    1. 权限准备:必须申请android.permission.PACKAGE_USAGE_STATS权限,这个权限无法通过常规弹窗申请,得引导用户跳转到系统设置页开启——可以通过启动Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)实现。
    2. 获取电池数据:通过context.getSystemService(BatteryStatsManager::class.java)拿到实例后,调用getBatteryUsageStats(),传入时间范围参数(比如要获取上次拔电后的数据,用BatteryStatsManager.STATS_SINCE_CHARGED)。返回的BatteryUsageStats集合里,每个AppBatteryUsageStats对象对应一个应用,能拿到该应用的电池消耗占比、后台耗电时长等核心数据。
    3. 配合获取屏幕使用时长:用UsageStatsManager的queryUsageStats()方法,获取指定时段内应用的前台运行时长,和电池数据做对比即可。
  • 自定义统计补充(针对特殊需求)
    如果需要更灵活的自定义时段统计,或者兼容更低版本,可以结合系统广播做本地数据积累:

    1. 监听ACTION_BATTERY_CHANGED广播,实时获取系统电池的电压、电流、剩余电量等数据;同时监听应用启停相关的广播,结合ActivityManager获取前台应用。
    2. 记录每个应用在前台/后台的运行时段,再结合系统总耗电数据,按运行时长、CPU占用比例等维度分摊到各应用。这种方式精度不如系统API,但能实现自定义时段的统计逻辑。
  • 关于旧隐藏API的说明
    旧的隐藏API(比如com.android.internal.os.BatteryStats)在Android 10+已经完全被限制,而且本身也无法精准统计单应用的时段耗电,完全不建议再用。像Gsam、AccuBattery这类应用,在Android 8+版本都是基于公开的BatteryStatsManager实现的,早期版本可能依赖了系统签名或特殊权限,但现在公开API已经能满足核心需求。

内容的提问来源于stack exchange,提问作者mahboob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:03:15