¿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 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?

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.

  • No se puede hacer referencia estática al método no estático (Android getApplicationContext ())
  • Necesidad de Contexto en clases sin actividad
  • ¿Cómo pasar el contexto de la aplicación (Android) a una clase Java?
  • ¿La mejor práctica para pasar Contexto a clases sin actividad?
  • Android: Inicie el servicio con Context.startService vs PendingIntent.getService
  • Utilizar el editor de diseño de manera efectiva en diseños con fragmentos no estáticos
  • Por favor, explícame Clase de contexto en Android
  • Context.getSystemService () es una llamada costosa?
  • Contexto de actividad de acabado android
  • Context.getApplicationContext () devuelve null en un Service
  • Android: ProgressDialog no se muestra
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.