El método getBaseContext()
solo es relevante cuando tienes un ContextWrapper
.
Android proporciona una clase ContextWrapper
que se crea alrededor de un Contexto existente usando:
ContextWrapper wrapper = nuevo ContextWrapper (contexto);
- Para una aplicación móvil, ¿es mejor el registro de usuario o Facebook Connect?
- ¿Cuál es el software de sincronización más confiable entre un teléfono Android y Outlook en una PC sin el uso de una nube?
- ¿Por dónde empiezo si quiero desarrollar aplicaciones de Android como hobby? ¿Cuáles son las cosas adicionales que necesito aprender?
- Cómo aprender el desarrollo de Android sin entrenamiento
- Cómo hacer que el camino infinito se mueva en Android
El beneficio de usar un ContextWrapper
es que le permite “modificar el comportamiento sin cambiar el contexto original”. Por ejemplo, si tiene una actividad llamada myActivity
, puede crear una View
con un tema diferente a myActivity
:
ContextWrapper customTheme = new ContextWrapper (myActivity) {
@Anular
public Resources.Theme getTheme () {
devuelve someTheme;
}
}
Ver myView = nuevo MyView (customTheme);
ContextWrapper
es realmente poderoso porque le permite anular la mayoría de las funciones proporcionadas por Context, incluido el código para acceder a los recursos (por ejemplo, openFileInput()
, getString()
), interactuar con otros componentes (por ejemplo, sendBroadcast()
, registerReceiver()
), solicita permisos (por ejemplo, checkCallingOrSelfPermission()
) y la resolución de ubicaciones del sistema de archivos (por ejemplo, getFilesDir()
). ContextWrapper es realmente útil para solucionar problemas específicos del dispositivo / versión o para aplicar personalizaciones únicas a componentes como Vistas que requieren un contexto.
El método getBaseContext()
se puede utilizar para acceder al Context
“base” que ContextWrapper
envuelve. Es posible que deba acceder al contexto “base” si necesita, por ejemplo, verificar si es un Service
, Activity
o Application
:
clase pública CustomToast {
public void makeText (contexto de contexto, int resId, int duración) {
while (context instanceof ContextWrapper) {
context = context.baseContext ();
}
if (instancia de contexto de servicio)) {
lanzar nueva RuntimeException (“No se puede llamar a esto desde un servicio”);
}
…
}
}
O si necesita llamar a la versión “sin envolver” de un método:
La clase MyCustomWrapper extiende ContextWrapper {
@Anular
getWallpaper public Drawable () {
if (BuildInfo.DEBUG) {
return debugBackground;
} más {
return getBaseContext (). getWallpaper ();
}
}
}