在没有轮询的情况下监控android电池电量?

在没有轮询的情况下监控android电池电量?,android,Android,我想监控安卓系统的电池电量,即使电池电量改变了一个百分点。 应满足以下两个条件: 1-由于效率原因,我不想通过轮询或定期检查电池电量(不使用报警管理器、处理程序或导致轮询的任何其他方法) 2-另一方面,我需要接收电池电量的变化,即使我的应用程序不可用 在前景中,或者如果它被杀死 目前我正在使用此代码: IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); context.registerReceiver(n

我想监控安卓系统的电池电量,即使电池电量改变了一个百分点。 应满足以下两个条件:

1-由于效率原因,我不想通过轮询或定期检查电池电量(不使用报警管理器、处理程序或导致轮询的任何其他方法)

2-另一方面,我需要接收电池电量的变化,即使我的应用程序不可用 在前景中,或者如果它被杀死

目前我正在使用此代码:

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
context.registerReceiver(new MyBatteryReceiver(), ifilter);
直到上下文(或我的活动)处于活动状态,即MyBatteryReceiver接收到 电池电量

其他人建议对registerReceiver使用null:

context.registerReceiver(null, ifilter);
这个解决方案意味着我应该定期检查电池电量

我查看了很多帖子,包括这篇:

但他们都没有回答这个问题:如何在没有轮询的情况下监控android的电池电量? 当然,当音量过低或过高时,我们可以使用以下广播:

<action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
<action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>

不幸的是,不可能使用类似的广播来改变电池电量:

<action android:name="android.intent.action.BATTERY_CHANGED" />


这是不可能的。您的需求(1和2)和正交。在应用程序未运行时,无法要求操作系统通知您电池电量的变化。唯一的办法就是投票。此外,可能不会在每次击球手百分比变化1%时发送广播
Intent
。每个制造商都可以以他们想要的任何方式实现这一点,并且您无法知道广播意图发送的频率或增量。如需帮助,请参见“谢谢”,在leat now,我确信唯一的解决方案是轮询。你知道轮询电池电量的最佳时间间隔吗?谢谢你,对不起,我不知道。我相信这取决于你的应用程序是什么,你在什么设备上运行它,轮询的目的/目标是什么,等等。如果你每15或30分钟做一次,我认为这不会对性能产生太大影响,但这只是一个猜测。这篇文章说,更新电池值的频率取决于设备制造商。在某些设备上,似乎您无法获得每1%的变化,但只有10%的变化,直到电池电量非常低。