如何在android中获取电池电量变化(仅当有电量/百分比变化时)?

Posted

技术标签:

【中文标题】如何在android中获取电池电量变化(仅当有电量/百分比变化时)?【英文标题】:How to get battery level change in android (only when there is level/percent change)? 【发布时间】:2012-05-22 19:02:30 【问题描述】:

有没有办法只在电量变化时获取电池电量?

我知道如何使用Intent.ACTION_BATTERY_CHANGED 获取电池信息,然后我将它的电池电量与最后一次电池电量(我之前保存的)进行比较,以防它等于我什么都不做 我做我的事.

我也知道ACTION_BATTERY_CHANGED 发生在电池信息发生变化时(不仅是电平),因此我需要检查电平。我不知道为什么,但有时效果不好。

有没有更好的方法呢?

【问题讨论】:

你说的“效果不好”是什么意思?你想念广播吗?或者当你得到一个时没有任何变化? 我不知道确切原因,因为它没有发生在我的手机中,我无法重新创建它。但是我认为我做的检查没有通过,所以我想知道是否有其他方法可以做到? 【参考方案1】:

没有其他(记录在案的)方法可以获取电池电量。当级别没有变化时忽略广播。就像你已经做的那样。

您可以通过以下方式立即获得最新状态:

IntentFilter batIntentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent battery = this.registerReceiver(null, batIntentFilter);
int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
Log.d("TAG", "Current Level: " + level);

【讨论】:

我需要注销它吗?接收者为空,所以我想我没有,对吗? 我试过了,还是不行。我从另一个 Battery_changed 接收器调用它,它给了我相同的水平......而不是最后一个。 是的,我知道你的意思,它没有用。我得到了当前级别,而不是最后一个\最新的。例如:电池电量从 84 变为 85 后,使用你的代码我得到 85 而不是 84。 这不是最新(又名最新)报告的级别吗?如果您想访问最新的但只有一个级别(最新之前的级别),只需将最新的写入 SharedPreferences 并在下次获取时从那里读取。

以上是关于如何在android中获取电池电量变化(仅当有电量/百分比变化时)?的主要内容,如果未能解决你的问题,请参考以下文章

在android中自动更新电池电量

Android 进阶——性能优化之电量优化全攻略及实战小结

Android 进阶——性能优化之电量优化全攻略及实战小结

Android_(自动化)自动获取手机电池的剩余电量

Android 通过清单访问电池统计信息或监控电池电量

如何在android中的ble中每5秒更新一次电池电量