我正试图在我的应用程序中获得电池统计数据,以便进行基准测试。美妙的BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER让我可以查询设备的微安培,这是很棒的。然而,这仅仅是在API 21中引入的,所以它能够到达的设备数量是相当有限的。在API的较低版本(下降到4.0)中,是否有兼容的方法来执行类似的操作?我知道BatteryManager.EXTRA_LEVEL会给出百分比,但这并不是细粒度的。
发布于 2015-07-28 00:14:59
据我所知,使用旧的公共API无法做到这一点。我开发了一个系统级的应用程序,它向用户显示电池使用情况。我的代码是基于应用程序的,我的用户可能需要root访问,或者应用程序必须使用平台密钥进行签名。您可以查看PowerUsageDetail、BatteryInfo和PowerUsageSummary类。如果幸运的话,您可以使用JAVA反射访问隐藏的API。否则,您需要平台键或根。内部API的变化非常频繁,因此使用起来非常痛苦。
还有几个工具您可能需要查看:
祝好运!
编辑:
发布于 2015-07-31 13:17:13
今年早些时候,我遇到了一篇有趣的文章,讲述了一种只根据智能手机耗电量来定位智能手机的方法,叫做PowerSpy。
虽然我本人从未实现/测试过该方法,但作者声称:
在Android上,通过反复读取以下两个文件来读取手机的总功率表:
/sys/class/power_supply/battery/voltage_now/sys/class/power_supply/battery/current_now。
他们还声称已经在Nexus 4、Nexus 5和HTC上测试了这种方法。虽然这并没有具体说明设备配备了哪个版本的Android,但Nexus 4应该配备API级别17,Nexus 5应该配备API级别19,但这两款手机似乎都要进行操作系统升级。
然而,与其他海报提到的方法相比,这似乎是一种完全不同的方法,因此可能值得一提。不幸的是,这似乎是一个低水平的方法,所以可能需要大量的工作才能得到你所需要的,因为电力,如物理,并不意味着真正的电池消耗。但也许你需要这样。
最后,文章提到了对这两个文件的访问不需要特殊的权限(这是他们最初所做的研究的动机)。
编辑
第二个想法是,如果你绘制了P=U*I (得到上面提到的U和我),并随着时间的推移进行集成(在这个离散的情况下,这将是一个和),你可能只是得到了电池消耗的一个非常好的近似。也许你还考虑了一个卡尔曼滤波器(为了减弱U和I上的噪音,记住你的算法不是唯一的消费者),你可能只是得到你想要的东西。
发布于 2015-07-30 06:51:30
根据电池监控培训http://developer.android.com/training/monitoring-device-state/battery-monitoring.html,您可以使用以下方法获取当前电池信息:
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float)scale;请注意,您需要继续重复调用它以获得更新的电池级别。当你唤醒你的应用程序并检查它时,他们建议:
https://stackoverflow.com/questions/30735069
复制相似问题