Bitbang3r Bitbang3r - 3 years ago 174
Android Question

"Static" startActivity(Intent) method?

I have a Button. Its View.OnClickHandler-implementing class is instantiated about 3 constructors deep from the nearest reference to an object. When clicked, I want it to open the Location settings panel so the user can enable GPS and/or network-based location by launching the


Short of promiscuously passing that parent Activity object from constructor to constructor to constructor so my
method can see it, is there any way to just reach up into the metaphorical static ether and scream, "Hey, Android... launch
" without having to have an actual live Activity object handy to use for its startActivity method?

Answer Source

I believe you are saying that you need an Activity object for the first parameter of new Intent or some other method to generate intents. Please do correct me if I'm wrong. If that is the case you actually just need a Context object (Activity is a sub-class of Context), that may not help particularly in this case.

I'd need to see the code to be sure there wasn't a way to get at a context object neatly from the spot you need it. There may be some way to do it (e.g. access to outer variable from anonymous object scope; a fairly common pattern with handlers on Android).

I would say that in some of my apps I do pass context objects around quite a bit. Personally I think this practice (known as dependency injection) is not so bad as some engineers think. If you are using managers or state-laden objects deep in the app, concealing this fact with global accessors or automatic dependency injection, is just papering over that fact.

Here are two other similar questions on this topic with respect to Android context objects:

Static Way to get Context on android?

Using Application context everywhere?

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download