2013-07-11 4 views
11

Я хочу, чтобы проверить, если запущена служба л написал этот кодПроверьте, работает ли служба на 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)); 
} 

и использовать его startServiceOrNo.startServiceIfItsNotRuning (OfflineChopsMonitor.class, это)

если л проверка службы от одного класса ее работы , но если я проверю то же обслуживание от другого класса, его проверка не работает

+0

что вам нужно? вы хотите проверить, что сервис запущен или нет? – ckpatel

+1

Пожалуйста, проверьте это http://stackoverflow.com/questions/600207/android-check-if-a-service-is-running –

ответ

22

Почему бы вам не позволить самому Службе понять это?

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, умный, не думал об этом x) – Houssni

+3

Но как Получаете ли вы доступ к своему объекту службы с вашего намерения? – pypmannetjies

+4

Как вы могли бы использовать это из других действий/фрагментов, чтобы проверить, работает ли служба? –

29

1.) В классе активность:

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.) В классе неактивности (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

Я использую следующие внутри деятельности:

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; 
} 
Смежные вопросы