Search code examples
androidwidgetandroid-appwidgetonupdate

Update android widget on condition


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


Solution

  • 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.