user1880779 user1880779 - 4 months ago 14
Java Question

Android Intent Context Confusing

Can somebody explain this to me please :

Intent intent = new Intent(Context, AlarmReceiver.class);


I never understood and I seriously think I never will if somebody doesn't try to explain this to me in depth. This whole context thing is so confusing to me. Sometimes it works like this :

Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);


Sometimes it wont work like that but it accepts only :

Intent intent = new Intent(context, AlarmReceiver.class);


Sometimes its :

Intent intent = new Intent(this, AlarmReceiver.class);


etc. etc. and many other.

I understand basics of context but how many are there? And why does eclipse throw me an error once and another time its fine? Why do we need to declare context sometimes? :

Context context;


I'm unable to find the right context for all situations how do I know what is the right one in every situation?

Answer

First of all, let me explain what the context is a bit better, then let's go on to how it can be used and received. Essentially, context is a reference to linking your resources to your program. Each object is given its own context, which contains the resources required to set that object up. It is required for many objects to be created, and to get program identifying information, among other purposes. This makes it invaluable to set up new views and activities, but it can also be used for other purposes. See also this answer for more information.

The context for an item can come from a variety of places. Sometimes it is stored and has to be retrieved, sometimes it is inherited. Basically, this is object oriented programming.

Just to give you a few examples:

Activity inherits context. Thus, if you are in an activity, you only need to pass itself to use the context. It also contains a pointer to getBaseContext(). You might occasionally need to reference that, if you need the entire application context, but most likely you won't for a while.

View does not inherit context. However, it does have a method getContext(). If you need to get a context from a view, this is the way to get it. This context will not be complete, but will only have the context for the contents of the View.

Fragments also do not inherit context. They contain a method getActivity(), which if the Fragment is active, will return the activity, which is the context for the Fragment.

BroadcastReceivers do not inherit context either. In fact, they do not contain context at all, but simply receive the current context when an event is received (Such as onReceive(Context context, Intent intent))