¿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.
- ¿Cómo iniciar una actividad desde una clase java?
- ¿Cómo pasar el contexto de la actividad a la actividad?
- ¿Cuál es la mejor manera de obtener el contexto?
- Excepción de puntero nulo iniciando IntentService
- SQLite Base de datos "contexto" pasó a adaptador
¿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?
- Uso del contexto de la aplicación en todas partes?
- Difícil reglas para el uso de Android getBaseContext, getApplicationContext o utilizando una actividad de "esto"
- Android: referencias a un contexto y pérdidas de memoria
- Intentando despedir una intención de un ContentObserver
- ¿Es seguro mantener una referencia estática a SharedPreferences ya su editor?
- ¿Por qué Android utiliza múltiples contextos y cada uno es diferente?
- ¿Cómo obtiene un objeto Drawable de un id de recurso en el paquete android?
- Detección de dispositivo Bluetooth en Android - startDiscovery ()
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