2016-06-25 5 views
0

Wenig Hintergrund: Ich entwickle Bibliothek, die einen Hintergrunddienst verwendet. Es gibt eine hohe Wahrscheinlichkeit, dass es 2 oder mehr Apps geben wird, die die Bibliothek auf demselben Android-Handy implementieren.Android - paralleler Lauf desselben Dienstes innerhalb mehrerer Apps vermeiden

F: Gibt es eine Lösung, die verhindert, dass dieser Hintergrunddienst ausgeführt wird, wenn eine der installierten Anwendungen den Dienst bereits gestartet hat? Ich brauche im Grunde nur eine Instanz dieses bg-Dienstes ausgeführt, egal wie viele Apps die lib mit Service implementiert.

Antwort

1

So später erkannte ich, dass ich alle laufenden Dienste auflisten kann und die Namen zu Service, den ich interessiere übereinstimmen. Und wenn es läuft, dann werde ich nicht versuchen, einen anderen zu starten.

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

Die Methode gibt true zurück, wenn der Dienst ausgeführt wird. Außerdem können Sie mit getRunningServiceInfo (x) nur bestimmte Mengen von Services auflisten.