我刚刚开始进行 android 开发并编写了一个应用程序来显示有关电池状态的详细信息。现在我想把整个东西放到一个小部件中——问题是:我真的需要在后台更新服务来监听 ACTION_BATTERY_CHANGED 意图吗?我的第一个想法是在 AndroidManifest.xml 中的小部件的 intet-filter 标记中放入一行 - 但显然它不是那么简单。如果 UpdateService 是正确的方法,我会这样做 - 但我只是想确定什么是正确的解决方案
问问题
1833 次
3 回答
4
我真的需要在后台更新服务来监听 ACTION_BATTERY_CHANGED 意图吗?
您不能使用BroadcastReceiver
为ACTION_BATTERY_CHANGED
. 它只能由活动或服务通过registerReceiver()
.
如果由于其他原因在内存中没有服务,更好的方法是轮询。设置一个AlarmManager
以每隔一段时间检查一次电池电量(请进行配置!)。要检查电池电量,请调用registerReceiver()
不ACTION_BATTERY_CHANGED
IntentFilter
带BroadcastReceiver
(null
对于第一个参数)。这将返回 last-broadcast ACTION_BATTERY_CHANGED
Intent
,您可以从中获得最新的收费水平。
于 2010-08-09T18:22:51.407 回答
2
我建议您定期轮询电池状态,例如每 30 分钟一次。为此,您只需updatePeriodMillis
在您的AppWidgetProviderInfo
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:updatePeriodMillis="1800000" />
..并通过覆盖您的onUpdate
方法来更新您的小部件AppWidgetProvider
。
编辑:正如 Martin 所指出的,30 分钟实际上是您可以通过这种方式接收更新的最短时间间隔。
于 2010-08-09T18:42:35.570 回答
1
信不信由你,以下工作:
cont.getApplicationContext().registerReceiver(rec, filter);
于 2011-09-10T23:19:31.423 回答