What is the context that is passed int the onReceive
method of a BroadcastReciver
:
public void onReceive (Context context, Intent intent)
According to the official documentation :
The Context in which the receiver is running.
A little research gives below result...
For static receiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("PANKAJ", "Context class " + context.getClass().getName());
Log.e("PANKAJ", "Application Context class "
+ context.getApplicationContext().getClass().getName());
}
}
I got below log
08-05 06:51:33.448: E/PANKAJ(2510): Context class android.app.ReceiverRestrictedContext
08-05 06:51:33.448: E/PANKAJ(2510): Application Context class android.app.Application
For bynamic receiver (registered into an Activity MainActivity) like
private BroadcastReceiver myReceiver = new BroadcastReceiver() {
public void onReceive(android.content.Context context, Intent intent) {
Log.e("PANKAJ", "Context class " + context.getClass().getName());
Log.e("PANKAJ", "Activity Context class "
+ MainActivity.this.getClass().getName());
Log.e("PANKAJ", "Application Context class "
+ context.getApplicationContext().getClass().getName());
}
};
I got below log
08-05 06:53:33.048: E/PANKAJ(2642): Context class com.example.testapp.MainActivity
08-05 06:53:33.048: E/PANKAJ(2642): Activity Context class com.example.testapp.MainActivity
08-05 06:53:33.048: E/PANKAJ(2642): Application Context class android.app.Application
So when it make true the statement given into documentation that The Context in which the receiver is running .
It is an application context . Same one that you get with method
getApplicationContext()
But:
This instance is a ReceiverRestrictedContext with two main functions disabled; calling registerReceiver() and bindService(). These two functions are not allowed from within an existing BroadcastReceiver.onReceive(). Each time a receiver processes a broadcast, the Context handed to it is a new instance.
使用getApplicationContext()
将上下文发送到onReceive方法。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.