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