Bei der Arbeit haben wir eine App erstellt, die die Routen eines Benutzers zur und von der Arbeit verfolgt und wir haben eine automatische Aufnahmefunktion eingebaut, ist es aber nicht benehmen sich so, wie wir es gerne hätten. Es scheint, als ob dieses automatische System vom Betriebssystem nach ein oder zwei Tagen der Inaktivität ausgeschaltet wird (die Telefone bewegen sich während dieser Zeit nicht einmal, sie werden nur zum Testen verwendet).Automatisches Starten einer App durch GPS-Ereignisse auf iOS und Android mit Xamarin.Forms
Bei iOS verwenden wir CLRegions, um mehrere Regionen um den aktuellen Standort des Benutzers herum zu erstellen. Es werden 5 Regionen an der genauen Position des Benutzers mit unterschiedlichen Radien erstellt und in einem Kreis um den Benutzer herum erstellt 10 Meter (diese haben einen Radius von 80 Metern). Das CLLocationManager-Objekt wird außerdem angewiesen, mit der Überwachung signifikanter Änderungen und Besuche zu beginnen (obwohl diese noch einmal ausgelöst werden müssen).
Auf Android verwenden wir Geofences über die LocationServices API und hier haben wir nur die 5 inkrementellen Radien um den aktuellen Standort des Benutzers. Falls der Benutzer die App auf Android-Geräten schließt oder das Telefon neu startet, wird ein Hintergrunddienst gestartet, der die Geofences neu initialisiert und mit deren Überwachung beginnt.
Beide Systeme funktionieren wirklich gut, wenn ich sie teste, indem ich ein wenig draußen laufe, aber es scheint, als ob sie nach ein oder zwei Tagen Inaktivität (alias am Wochenende) aufhören zu arbeiten. Ich habe das schon eine ganze Weile ausprobiert und obwohl es besser geworden ist, ist es immer noch nicht perfekt.
Ist es sogar möglich, ein zuverlässiges System zum automatischen Starten der App im Hintergrund zu haben, wenn ein Geofence/eine Region ausgelöst wird, egal wie lange die App ausgeschaltet wurde? Ich weiß, dass beide OS Hintergrundaufgaben sehr unterschiedlich handhaben, aber ich bin mir nicht sicher über die langfristigen Einschränkungen der GPS-Nutzung auf diese Weise.
Die App machen wir in Xamarin Forms geschrieben, aber diese Systeme sind in ihrem nativen Projekt (noch in C#, aber vollen Zugriff auf die gesamte native Plattform) geschrieben
Danke für die Info, mir war nicht völlig bewusst, dass selbst ein Hintergrund-Service vom System nach einer Weile auf Android gestoppt werden würde. Denkst du, dass es einen Weg gibt zu erkennen, wann die Absicht gestoppt wird und danach zu handeln? Oh, und Sie können leicht ein Java-Beispiel geben, zum größten Teil ist es eine andere Syntax als tatsächlich eine andere Sprache mit Xamarin (obwohl die Manifest-Optionen im C# -Code definiert sind und der Compiler das Manifest-XML behandelt) – zezioen
Soweit zu erkennen Damit der Dienst gestoppt wird, benötigen Sie einen Prozess, um dies zu überprüfen, der wiederum auch getötet werden könnte, was uns wieder auf Platz eins bringt. Ich habe meine Antwort mit den Codebeispielen für einen Vordergrunddienst und einen Alarmmanager aktualisiert, der den Dienst regelmäßig neu startet. Hoffe, das klappt für dich! –