2012-05-07 14 views
8

Jest jeden problem - moja główna działalność rozpoczyna usługę i jest wtedy zamknięta. Gdy aplikacja zostanie uruchomiona następnym razem, aplikacja powinna uzyskać odwołanie do tej usługi i ją zatrzymać. Ale nie wiem, jak mogę uzyskać odniesienie do działającej usługi. Proszę, mam nadzieję, że możesz mi pomóc. Dziękuję Ci.Jak uzyskać referencję do bieżącej usługi?

Odpowiedz

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

, ale jak mogę zatrzymać usługę za pomocą Twojego przykładu? – user1166635

+0

@ user1166635 bardzo prosto, sprawdź moją edycję. –

+3

Uhm .. to dość niepotrzebne. Po prostu wywołaj 'stopService' bez względu na to, czy twoja' usługa' działa, czy nie - nie ma żadnej szkody, jeśli nie jest - 'stopService' zwróci tylko' false'. – Jens

11

Ta odpowiedź jest oparta na numerze answer by @DawidSajdak. Jego kod jest w większości poprawny, ale zmienił instrukcje return, więc daje odwrotność zamierzonego wyniku. Prawidłowy kod powinien być:

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)); 
} 
Powiązane problemy