The CommonsBlog

A Real Use for getApplicationContext()!

getApplicationContext() is a seriously overused method. Most times where I see it, using this would work just as well, if not better.

One case where getApplicationContext() can be useful, though, lies in the intersection of sticky broadcasts and BroadcastReceiver, as discovered through discussions on this StackOverflow question.

A sticky broadcast is one where Android holds onto the last Intent that was broadcast for that action. You can get that last Intent by calling registerReceiver(), with an IntentFilter that matches the action, but a null BroadcastReceiver.

Things get tricky, though, if you try doing that from the onReceive() method of a manifest-registered BroadcastReceiver, such as an app widget implementation. If you use the Context object that is passed into onReceive() and call registerReceiver() on it, you get an error. The error complains about a BroadcastReceiver registering another BroadcastReceiver, despite the fact that, in this case, you’re actually just trying to get a sticky broadcast Intent value.

The workaround, as Ms. Hackborn pointed out, is to use getApplicationContext(). That Context object will support the registerReceiver() call, so you can get the sticky broadcast Intent value you seek.

Need an Android programming guide for your development team? An Enterprise Warescription to The Busy Coder’s Guide to Android Development is available for teams of 10+ members. Contact Mark Murphy for details.