¿Cómo usar getSystemService en una clase que no sea de actividad?
Estoy construyendo una aplicación que dispara una alarma a través de AlarmManager.
Me gustaría poder llamar a la alarma a través de su propia clase de no actividad, pero como no estoy extendiendo la actividad, no parecen tener ningún "contexto". Este concepto me confunde, y he leído los documentos sdk.
- Android JUnit4 Pruebas - ¿Dónde obtener el contexto de?
- ¿Cómo usar Android getString () sin violar los principios básicos de OOD?
- Cómo hacer referencia a la actividad actual o principal de otra clase
- ¿Cuándo usar y no utilizar la clase de aplicación de Android?
- ¿Cómo obtener un método llamado con diferentes parámetros?
¿Cómo voy a usar:
alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
En mi clase de no-activty?
¿También, estoy asumiendo que el conseguir del contexto me permitirá utilizar SharedPrefs y Intents en mi clase del non-activity también?
- Intenta invocar el método virtual 'java.lang.String android.content.Context.getPackageName ()' en una referencia de objeto nulo
- Android: ProgressDialog no se muestra
- ¿En qué caso se devuelve bindService?
- ¿Cuándo se llama a getApplicationContext () de la clase Application?
- SQLite Base de datos "contexto" pasó a adaptador
- ¿Forma estática de obtener 'Contexto' en Android?
- ¿Cómo recuperar un contexto de una clase que no sea de actividad?
- Obtener contexto en la biblioteca de Android
Puede pasar el contexto a la clase que no es de actividad, que es la forma preferida o podría encapsular el contexto base de la aplicación en un singleton que le permitiría acceder al contexto en cualquier parte de la aplicación. En algunos casos esto podría ser una buena solución, pero en otros su no ciertamente una buena.
De todos modos, si quieres activar una alarma a través de AlarmManager
estoy bastante seguro de que la alarma debe heredar de un Service
o mejor aún de IntentService
y en tales casos tienes acceso al contexto a través de this.getBaseContext()
o this.getApplicationContext()
Service
y Activity
heredan de Context
– por lo que cuando estás llamando a getSystemService
en estas clases, realmente estás llamando a super.getSystemService
.
Si desea tener un Context
disponible en otra clase, puede pasar uno como argumento a un método de esa clase, mantener una referencia a él, etc.
Editar : Ejemplo de código. Pero en serio, es extremadamente básico – si usted entiende la herencia y los métodos.
class MyActivity extends Activity { // Activity extends Context, so MyActivity also extends Context void someMethod() { MyOtherClass.useStaticContext(this); MyOtherClass instance = new MyOtherClass(); instance.useInstanceContext(this.getApplicationContext()); } } class MyOtherClass { static void useStaticContext(Context context) { } void useInstanceContext(Context context) { } }
Puede probar lo siguiente, que le permite obtener el contexto actual de la vista se está ejecutando a través de.
alarmTest = (AlarmManager)this.getContext().getSystemService(Context.ALARM_SERVICE);
Necesitas pasar un contexto a la clase que no es de actividad.
- ¿Cómo poner la variable dentro de los recursos de la cadena?
- Preguntas sobre el cifrado de activos de aplicaciones de Google Play