我刚开始使用android开发并编写了一个应用程序来显示有关电池状态的详细信息。 现在我想把整个东西放到一个小部件中 - 这就是问题所在: 我是否真的需要在后台使用更新服务来侦听ACTION_BATTERY_CHANGED意图?我的第一个想法是只放一个 在AndroidManifest.xml中输入小部件的intet-filter标签 - 但显然它并不那么简单。 如果UpdateService是正确的方式我会这样做 - 但我只是想确定适当的解决方案是什么
答案 0 :(得分:4)
我真的需要更新服务吗? 要倾听的背景 ACTION_BATTERY_CHANGED意图?
您无法为BroadcastReceiver
使用已注册的ACTION_BATTERY_CHANGED
。它只能通过活动或服务registerReceiver()
注册。
如果由于其他原因在内存中没有服务,更好的方法是轮询。设置AlarmManager
以经常检查电池电量(可配置,请!)。要检查电池电量,请致电registerReceiver()
ACTION_BATTERY_CHANGED
IntentFilter
,而不要BroadcastReceiver
(第一个参数为null
)。这将返回上次广播ACTION_BATTERY_CHANGED
Intent
,您可以从中获得最近的费用级别。
答案 1 :(得分:2)
我建议您定期轮询电池状态,例如每30分钟一次。为此,您只需在updatePeriodMillis
AppWidgetProviderInfo
的值即可
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:updatePeriodMillis="1800000" />
..并通过覆盖onUpdate
的AppWidgetProvider
方法更新您的小部件。
编辑:正如Martin所指出的那样,30分钟实际上是您可以通过这种方式接收更新的最短时间间隔。
答案 2 :(得分:1)
信不信由你,以下作品:
cont.getApplicationContext().registerReceiver(rec, filter);