Obtener contexto en un servicio

280

¿Hay alguna forma confiable de obtener un Contexta Service?

Quiero registrar un receptor de transmisión, ACTION_PHONE_STATE_CHANGEDpero no necesito que mi aplicación siempre obtenga esta información, así que no la pongo en el Manifest.

Sin embargo, no puedo hacer que el GC elimine el receptor de transmisión cuando necesito esta información, así que estoy registrando el receptor de transmisión en a Service.

Por lo tanto, necesito un Contextpara llamar registerReceiver(). Cuando ya no lo necesito, ACTION_PHONE_STATE_CHANGEDlo anulo .

¿Algun consejo?

usuario123321
fuente

Respuestas:

781

El servicio es un contexto.

mibollma
fuente
3
Tuve este problema, pero resultó que era el hilo de trabajo que no tenía contexto. Lo resolví pasando un contexto al construir el hilo.
ctrl-alt-delor
17
Nota: El contexto dentro del servicio no será visible hasta que onStart o onStartCommand en servicios: stackoverflow.com/questions/7619917/…
clase
36
Esta puede ser la respuesta más corta con los votos más altos en stackoverflow
Sayka
44
considerando el tamaño de la respuesta y los votos recibidos, no creo que ninguna otra respuesta en SO
supere
2
Estas 4 palabras simplemente resolvieron mi problema que he estado tratando de resolver durante 3 horas.
Nirup Iyer
64

Servicese extiende lo ContextWrapperque se extiende Context. Por lo tanto, el Servicees a Context. Use 'this'palabras clave en el servicio.

usuario2138983
fuente
31
  1. Service se extiende ContextWrapper
  2. ContextWrapper se extiende Context

Entonces....

Context context = this;

(en clase de servicio o actividad)

Hardik Gajera
fuente
8

Como Servicees a Context, el contexto variable debe ser this:

DataBaseManager dbm = Utils.getDataManager(this);   
Jorgesys
fuente
5

Como el servicio ya es un contexto en sí mismo

incluso puedes hacerlo:

Context mContext = this;

O

Context mContext = [class name].this;  //[] only specify the class name
// mContext = JobServiceSchedule.this; 
Ali Azaz Alam
fuente
1

solo en caso de que alguien esté recibiendo NullPointerException, necesita obtener el contexto dentroonCreate().

Servicees un Context, así que haz esto:

@Override
public void onCreate() {
    super.onCreate();
    context = this;
}
Panda Eclesiastés
fuente