根据条件更新android小部件

根据条件更新android小部件,android,widget,android-appwidget,onupdate,Android,Widget,Android Appwidget,Onupdate,我刚刚开始android开发,已经编写了一个应用程序来显示电池状态的详细信息。 现在我想把整个东西放到一个小部件中——问题是: 我真的需要一个后台更新服务来监听行动\电池\改变的意图吗?我的第一个想法是放一个 在AndroidManifest.xml中插入小部件的intet filter标记,但显然不是那么简单。 如果UpdateService是正确的方式,我会这样做,但我只是想确定什么是正确的解决方案 我真的需要更新服务吗 要听的背景 行动\电池\改变意图 您不能将清单注册的Broadcast

我刚刚开始android开发,已经编写了一个应用程序来显示电池状态的详细信息。 现在我想把整个东西放到一个小部件中——问题是: 我真的需要一个后台更新服务来监听行动\电池\改变的意图吗?我的第一个想法是放一个 在AndroidManifest.xml中插入小部件的intet filter标记,但显然不是那么简单。 如果UpdateService是正确的方式,我会这样做,但我只是想确定什么是正确的解决方案

我真的需要更新服务吗 要听的背景 行动\电池\改变意图

您不能将清单注册的
BroadcastReceiver
用于
ACTION\u BATTERY\u CHANGED
。它只能由活动或服务通过
registerReceiver()
注册


如果由于其他原因,内存中没有服务,更好的方法是轮询。设置
AlarmManager
每隔一段时间检查一次电池电量(请配置!)。要检查电池电量,请调用
registerReceiver()
以查看电池更改后的
操作
IntentFilter
,而不使用
广播接收器(
null
用于第一个参数)。这将返回上一次广播
操作\u电池\u更改的
意图
,您可以从中获取最新的充电水平。

我建议您定期轮询电池状态,例如每30分钟一次。为此,您只需在

方法


编辑:正如Martin所指出的,30分钟实际上是通过这种方式接收更新的最短时间间隔。

信不信由你,以下方法有效:

cont.getApplicationContext().registerReceiver(rec, filter);

谢谢-但这将被限制为至少30分钟,因为这是updatePeriodMillis的最小值,不是吗?你是对的!这很有趣,因为这个限制并不总是存在()我确认它的引入是因为程序员使用它来频繁更新(就像时钟部件的每一秒)——这可能对电池寿命不是一件好事
cont.getApplicationContext().registerReceiver(rec, filter);