Wie kann ich überprüfen, ob ein Hintergrunddienst läuft?
Ich möchte eine Android-Aktivität, die den Status des Dienstes umschaltet - ich kann ihn einschalten, wenn er ausgeschaltet ist, und ausschalten, wenn er eingeschaltet ist.
Wie kann ich überprüfen, ob ein Hintergrunddienst läuft?
Ich möchte eine Android-Aktivität, die den Status des Dienstes umschaltet - ich kann ihn einschalten, wenn er ausgeschaltet ist, und ausschalten, wenn er eingeschaltet ist.
Xamarin C#-Version:
private bool isMyServiceRunning(System.Type cls)
{
ActivityManager manager = (ActivityManager)GetSystemService(Context.ActivityService);
foreach (var service in manager.GetRunningServices(int.MaxValue)) {
if (service.Service.ClassName.Equals(Java.Lang.Class.FromType(cls).CanonicalName)) {
return true;
}
}
return false;
}
Für den hier beschriebenen Anwendungsfall können wir einfach die stopService()
den Rückgabewert der Methode. Sie gibt zurück true
wenn der angegebene Dienst existiert und er beendet wird. Andernfalls gibt es false
. Sie können also den Dienst neu starten, wenn das Ergebnis false
sonst ist sichergestellt, dass der aktuelle Dienst eingestellt wurde :) Es wäre besser, wenn Sie einen Blick auf ce .
Die Antwort von geekQ, aber in der Kotlin-Klasse. Danke geekQ
fun isMyServiceRunning(serviceClass : Class<*> ) : Boolean{
var manager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
for (service in manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.name.equals(service.service.className)) {
return true
}
}
return false
}
Der Aufruf
isMyServiceRunning(NewService::class.java)
Verwenden Sie in Ihrer Dienstunterklasse einen statischen Booleschen Wert, um den Zustand des Dienstes zu ermitteln, wie unten gezeigt.
MeinDienst.kt
class MyService : Service() {
override fun onCreate() {
super.onCreate()
isServiceStarted = true
}
override fun onDestroy() {
super.onDestroy()
isServiceStarted = false
}
companion object {
var isServiceStarted = false
}
}
MainActivity.kt
class MainActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val serviceStarted = FileObserverService.isServiceStarted
if (!serviceStarted) {
val startFileObserverService = Intent(this, FileObserverService::class.java)
ContextCompat.startForegroundService(this, startFileObserverService)
}
}
}
Für Kotlin können Sie den folgenden Code verwenden.
fun isMyServiceRunning(calssObj: Class<SERVICE_CALL_NAME>): Boolean {
val manager = requireActivity().getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
for (service in manager.getRunningServices(Integer.MAX_VALUE)) {
if (calssObj.getName().equals(service.service.getClassName())) {
return true
}
}
return false
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
2 Stimmen
Überprüfen Sie dieser deutsche Leitfaden .
23 Stimmen
Die richtige Antwort steht unten und nicht die markierte: stackoverflow.com/a/5921190/2369122
2 Stimmen
@toidiu Wenn das nicht schon nerfed worden ist wie
getRunningTasks()
dann wird es wahrscheinlich so sein.0 Stimmen
Mit der Funktion getSystemService() können Sie alle laufenden Dienste abrufen. Gehen Sie die Liste in einer Schleife durch und prüfen Sie, ob Ihr Dienst in der Liste vorhanden ist. wiki.workassis.com/Android-check-the-service-is-running