3

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

4

3 回答 3

4

我真的需要在后台更新服务来监听 ACTION_BATTERY_CHANGED 意图吗?

您不能使用BroadcastReceiverACTION_BATTERY_CHANGED. 它只能由活动或服务通过registerReceiver().

如果由于其他原因在内存中没有服务,更好的方法是轮询。设置一个AlarmManager以每隔一段时间检查一次电池电量(请进行配置!)。要检查电池电量,请调用registerReceiver()ACTION_BATTERY_CHANGED IntentFilterBroadcastReceiver(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 回答