Voici ce que j'ai trouvé concernant l'utilisation de context:
1) . Dans un Activitylui-même, utilisez thispour gonfler des dispositions et des menus, enregistrer des menus contextuels, instancier des widgets, démarrer d'autres activités, créer de nouveaux Intentdans un Activity, instancier des préférences ou d'autres méthodes disponibles dans un Activity.
Gonfler la disposition:
View mView = this.getLayoutInflater().inflate(R.layout.myLayout, myViewGroup);
Gonfler le menu:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
this.getMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
Enregistrer le menu contextuel:
this.registerForContextMenu(myView);
Widget d'instanciation:
TextView myTextView = (TextView) this.findViewById(R.id.myTextView);
Lancer un Activity:
Intent mIntent = new Intent(this, MyActivity.class);
this.startActivity(mIntent);
Instancier les préférences:
SharedPreferences mSharedPreferences = this.getPreferenceManager().getSharedPreferences();
2). Pour la classe à l'échelle de l'application, utilisez getApplicationContext()ce contexte pour la durée de vie de l'application.
Récupérez le nom du package Android actuel:
public class MyApplication extends Application {
public static String getPackageName() {
String packageName = null;
try {
PackageInfo mPackageInfo = getApplicationContext().getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), 0);
packageName = mPackageInfo.packageName;
} catch (NameNotFoundException e) {
// Log error here.
}
return packageName;
}
}
Liez une classe à l'échelle de l'application:
Intent mIntent = new Intent(this, MyPersistent.class);
MyServiceConnection mServiceConnection = new MyServiceConnection();
if (mServiceConnection != null) {
getApplicationContext().bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
3). Pour les écouteurs et autres types de classes Android (par exemple ContentObserver), utilisez une substitution de contexte comme:
mContext = this; // Example 1
mContext = context; // Example 2
où thisou contextest le contexte d'une classe (Activité, etc.).
Activity substitution de contexte:
public class MyActivity extends Activity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}
}
Substitution du contexte d'écoute:
public class MyLocationListener implements LocationListener {
private Context mContext;
public MyLocationListener(Context context) {
mContext = context;
}
}
ContentObserver substitution de contexte:
public class MyContentObserver extends ContentObserver {
private Context mContext;
public MyContentObserver(Handler handler, Context context) {
super(handler);
mContext = context;
}
}
4). Pour BroadcastReceiver(y compris le récepteur intégré / intégré), utilisez le propre contexte du récepteur.
Externe BroadcastReceiver:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(Intent.ACTION_SCREEN_OFF)) {
sendReceiverAction(context, true);
}
private static void sendReceiverAction(Context context, boolean state) {
Intent mIntent = new Intent(context.getClass().getName() + "." + context.getString(R.string.receiver_action));
mIntent.putExtra("extra", state);
context.sendBroadcast(mIntent, null);
}
}
}
Inline / Embedded BroadcastReceiver:
public class MyActivity extends Activity {
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final boolean connected = intent.getBooleanExtra(context.getString(R.string.connected), false);
if (connected) {
// Do something.
}
}
};
}
5). Pour les services, utilisez le propre contexte du service.
public class MyService extends Service {
private BroadcastReceiver mBroadcastReceiver;
@Override
public void onCreate() {
super.onCreate();
registerReceiver();
}
private void registerReceiver() {
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(Intent.ACTION_SCREEN_OFF);
this.mBroadcastReceiver = new MyBroadcastReceiver();
this.registerReceiver(this.mBroadcastReceiver, mIntentFilter);
}
}
6). Pour Toasts, utilisez généralement getApplicationContext(), mais si possible, utilisez le contexte transmis à partir d'une activité, d'un service, etc.
Utilisez le contexte de l'application:
Toast mToast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG);
mToast.show();
Utilisez le contexte transmis depuis une source:
public static void showLongToast(Context context, String message) {
if (context != null && message != null) {
Toast mToast = Toast.makeText(context, message, Toast.LENGTH_LONG);
mToast.show();
}
}
Et enfin, n'utilisez pas getBaseContext()comme conseillé par les développeurs de framework Android.
MISE À JOUR: Ajoutez des exemples d' Contextutilisation.