2016-06-25 7 views
0

リトル背景:私は1つのバックグラウンドサービスを使用するライブラリを開発中です。同じアンドロイド携帯端末にライブラリを実装しているアプリが2つ以上ある可能性があります。Android - 複数のアプリケーションで同じサービスを同時に実行するのを避ける

Q:インストールされているアプリのいずれかがすでにサービスを開始している場合、このバックグラウンドサービスが実行されないようにするソリューションはありますか?私は基本的には、どれだけ多くのアプリがサービスでlibを実装していても、そのbgサービスのインスタンスを1つだけ実行する必要があります。

答えて

1

それでは、実行中のすべてのサービスをリストし、私が関心のあるサービスに名前を一致させることができることに気付きました。そして、実行している場合、別のサービスを開始しようとしません。

protected static boolean isMyServiceRunning(Class<?> serviceClass, Context cont) { 
    ActivityManager manager = (ActivityManager) cont.getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningServiceInfo> list = manager 
      .getRunningServices(Integer.MAX_VALUE); 

    if (list == null || list.isEmpty()) { 
     return true; 
    } 
    for (ActivityManager.RunningServiceInfo service : list) { 
     if (serviceClass.getName().equals(service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 

サービスが実行されていると、メソッドはtrueを返します。また、getRunningServiceInfo(x)を使用して、特定の量のサービスのみをリストすることもできます。

関連する問題