2012-05-07 12 views
8

Hay un problema: mi actividad principal inicia el servicio y luego se cierra. Cuando la aplicación se inicie la próxima vez, la aplicación debería hacer referencia a este servicio y detenerlo. Pero no sé cómo puedo obtener una referencia a un servicio en ejecución. Por favor, espero que me puedas ayudar. Gracias.¿Cómo hacer referencia al servicio en ejecución?

Respuesta

0
private boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if ("your.service.classname".equals(service.service.getClassName())) { 
      return false; 
     } 
    } 
    return true; 
} 

if(isMyServiceRunning()) { 
    stopService(new Intent(ServiceTest.this,MailService.class)); 
} 
+0

pero ¿cómo puedo detener el servicio utilizando su ejemplo? – user1166635

+0

@ user1166635 muy simple, mira mi edición. –

+3

Uhm .. eso es bastante superfluo. Simplemente llame a 'stopService' independientemente de si su' Servicio' se está ejecutando o no - no hay daño si no lo está - 'stopService' simplemente devolverá' false'. – Jens

11

Esta respuesta se basa en el answer by @DawidSajdak. Su código es en su mayoría correcto, pero cambió las declaraciones return, por lo que da el resultado opuesto. El código correcto debería ser:

private boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if ("your.service.classname".equals(service.service.getClassName())) { 
      return true; // Package name matches, our service is running 
     } 
    } 
    return false; // No matching package name found => Our service is not running 
} 

if(isMyServiceRunning()) { 
    stopService(new Intent(ServiceTest.this,MailService.class)); 
} 
Cuestiones relacionadas