Can somebody explain this to me please :
Intent intent = new Intent(Context, AlarmReceiver.class);
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
Intent intent = new Intent(context, AlarmReceiver.class);
Intent intent = new Intent(this, AlarmReceiver.class);
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.
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))