2013-07-11 13 views
11

Voglio controllare se un servizio è in esecuzione l ha scritto questo codiceControlla se il servizio è in esecuzione su Android?

public class startServiceOrNo { 
public static void startServiceIfItsNotRuning(Class<?> class1, Context context) { 
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (class1.getName().equals(service.service.getClassName())) { 
      Lg.d("servisstart SERVICE ALREADY START" + class1.getName()); 
      return; 
     } 
    } 
    Lg.d("servisstart SSERVICE NEW SERVIS " + class1.getName()); 
    context.startService(new Intent(context, class1)); 
} 

e usarlo startServiceOrNo.startServiceIfItsNotRuning (OfflineChopsMonitor.class, questo)

se il servizio l Controllo da una classe il suo lavoro , ma se controllo lo stesso servizio da una classe diversa, il suo controllo non funziona

+0

cosa vuoi? vuoi controllare il servizio è runnning o no ?? – ckpatel

+1

Si prega di controllare questo http://stackoverflow.com/questions/600207/android-check-if-a-service-is-running –

risposta

22

Perché non lasciare che il Servizio stesso lo capisca?

public class MyService extends Service 
{ 
    private boolean mRunning; 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     mRunning = false; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) 
    { 
     if (!mRunning) { 
      mRunning = true; 
      // do something 
     } 
     return super.onStartCommand(intent, flags, startId); 
    } 
} 
+2

+1, uno intelligente, non ci ho pensato x) – Houssni

+3

Ma come hai accesso al tuo oggetto di servizio dal tuo intento? – pypmannetjies

+4

Come utilizzeresti questo da altre attività/frammenti per verificare se il servizio è in esecuzione? –

29

1.) In Classe di attività:

private boolean isMyServiceRunning(Class<?> serviceClass) { 
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (serviceClass.getName().equals(service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 

2.) In classe non-attività (BroadcastReceiver):

private boolean isMyServiceRunning(Class<?> serviceClass,Context context) { 
     ActivityManager manager = (ActivityManager)context. getSystemService(Context.ACTIVITY_SERVICE); 
     for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      if (serviceClass.getName().equals(service.service.getClassName())) { 
       Log.i("Service already","running"); 
       return true; 
      } 
     } 
     Log.i("Service not","running"); 
     return false; 
    } 
6

Io uso a seguito dall'interno di un'attività:

private boolean isMyServiceRunning(Class<?> serviceClass) { 
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
    if (serviceClass.getName().equals(service.service.getClassName())) { 
     return true; 
    } 
    } 
    return false; 
} 
Problemi correlati