Reputation: 13710
I'm just starting with android development and have written an application to show details about the battery status. Now I wanted to put the whole thing into an widget - and here's the question: Do I really need a update service in the background to listen for ACTION_BATTERY_CHANGED intents? My first thought was to put just a line into the intet-filter tag of the widget in the AndroidManifest.xml - but obviously it's not that simple. If the UpdateService is the right way I'll do so - but I just wanted to make sure what the proper solution is
Upvotes: 3
Views: 1876
Reputation: 429
Believe it or not, the following works:
cont.getApplicationContext().registerReceiver(rec, filter);
Upvotes: 1
Reputation: 74507
I suggest you poll the battery status periodically, e.g. every 30 min. To do that you can simply specify a value for updatePeriodMillis
in your AppWidgetProviderInfo
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:updatePeriodMillis="1800000" />
..and update your widget by overriding the onUpdate
method of your AppWidgetProvider
.
edit: As pointed out by Martin, 30 min is actually the shortest interval in which you can receive updates this way.
Upvotes: 2
Reputation: 1006574
Do I really need a update service in the background to listen for ACTION_BATTERY_CHANGED intents?
You cannot use a manifest-registered BroadcastReceiver
for ACTION_BATTERY_CHANGED
. It can only be registered by an activity or service via registerReceiver()
.
If you do not have a service in memory for other reasons, a better approach is to poll. Set up an AlarmManager
to check the battery level every so often (configurable, please!). To check the battery level, call registerReceiver()
for an ACTION_BATTERY_CHANGED
IntentFilter
without a BroadcastReceiver
(null
for the first parameter). This will return the last-broadcast ACTION_BATTERY_CHANGED
Intent
, from which you can get the most-recent charge level.
Upvotes: 3