2011-06-23 9 views

答えて

14
private boolean isServiceRunning(String serviceName){ 
     boolean serviceRunning = false; 
     ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
     List<ActivityManager.RunningServiceInfo> l = am.getRunningServices(50); 
     Iterator<ActivityManager.RunningServiceInfo> i = l.iterator(); 
     while (i.hasNext()) { 
      ActivityManager.RunningServiceInfo runningServiceInfo = i 
        .next(); 

      if(runningServiceInfo.service.getClassName().equals(serviceName)){ 
       serviceRunning = true; 

       if(runningServiceInfo.foreground) 
       { 
        //service run in foreground 
       } 
      } 
     } 
     return serviceRunning; 
    } 

は、あなたのサービスがフォアグラウンドで実行されているかどうかを知りたい場合は、単にいくつかの他に脂肪のアプリケーションを開き、サービスがまだ実行されているか、単にフラグservice.foregroundをチェックしているかどうかを確認します。

+5

感謝を!私はちょうどこの行を追加する必要があった:serviceInForeground = runningServiceInfo.foreground; – user811985

+0

onDestroy()のstopForeground(true)はどうですか?サービスがフォアグラウンドで実行されないようにしますか? –

+4

@ user811985参考、RunningServiceInfo.foregroundのドキュメントは次のように述べています。 "サービス*がフォアグラウンドプロセスとして実行するように要求されている場合はtrueに設定されます。"つまり、アンドロイドが実際にフォアグラウンドへのサービスを受け入れたかどうかはわかりません。 http://developer.android.com/reference/android/app/ActivityManager.RunningServiceInfo.html#foreground – newbyca

12
public static boolean isServiceRunningInForeground(Context context, Class<?> serviceClass) { 
     ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
     for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (serviceClass.getName().equals(service.service.getClassName())) { 
      if (service.foreground) { 
       return true; 
      } 

     } 
     } 
     return false; 
    } 
+3

この回答のコードは、受け入れられた回答とは異なり、50以上のサービスが実行中であっても機能します。 – Sam

+1

受け入れられたものと同じですが、より明確で、短く、シンプルです。また、50だけでなくすべてのサービスをチェックしてください。 – Sergio

0

答えのより効率的なバリエーション:素晴らしい仕事https://stackoverflow.com/a/36127260/1275265

public static boolean isServiceRunningInForeground(Context context, Class<?> serviceClass) { 
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (serviceClass.getName().equals(service.service.getClassName())) { 
     return service.foreground; 
     } 
    } 
    return false; 
} 
関連する問題