2013-07-11 25 views
11

l will, wenn ein Dienst zu überprüfen, läuft l diesen CodeÜberprüfen Sie, ob der Dienst unter Android ausgeführt wird.

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)); 
} 

und es startServiceOrNo.startServiceIfItsNotRuning (OfflineChopsMonitor.class, this)

wenn l Check-Service aus einer Klasse ihrer Arbeit verwenden schrieb , aber wenn ich gleichen Service von der unterschiedlichen Klasse überprüfe, funktioniert sein Check nicht

+0

was willst du? Möchten Sie überprüfen, ob der Dienst läuft oder nicht? – ckpatel

+1

Bitte überprüfen Sie dieses http://stackoverflow.com/questions/600207/android-check-if-a-service-is- running –

Antwort

22

Warum lassen Sie den Service nicht selbst herausfinden, dass heraus?

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, smart, habe nicht daran gedacht x) – Houssni

+3

Aber wie Haben Sie Zugang zu Ihrem Serviceobjekt? – pypmannetjies

+4

Wie würden Sie dies aus anderen Aktivitäten/Fragmenten verwenden, um zu überprüfen, ob der Dienst ausgeführt wird? –

29

1.) In Aktivitätsklasse:

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.) Nicht Aktivitätsklasse (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

Ich verwende folgende aus dem Inneren einer Aktivität:

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; 
} 
Verwandte Themen