Mein Szenario ist, dass ich möchte, dass ein Dienst in regelmäßigen Abständen einige Informationen (z. B. Standort des Benutzers) erhalten, melden Sie es an meinen Server und erhalten eine Push-Benachrichtigung, wenn der Speicherort mit einem X-Standort übereinstimmt.Verwenden von GoogleAPIClient in Hintergrunddienste
Ich würde ein paar Tipps bekommen, was der beste Mechanismus wäre, um regelmäßig Ortsinformationen abzurufen, unabhängig davon, ob die Anwendung läuft oder nicht. Hier sind die Optionen, über die ich nachgedacht habe und einige Hintergrundinformationen zu jedem.
ein Standard-Android-Service
Mein erster Gedanke herzustellen war eine STICKY-Dienst zu erstellen, die eine GoogleAPIClient initialisiert, die Standortaktualisierungen erhalten und sobald ein Standort empfangen wird, wird es an den Server senden. Das Problem, das ich bei diesem Ansatz habe, ist, dass ich die Standortinformationen regelmäßig abrufen muss. Der Dienst wird also ständig ausgeführt, auch wenn kein Standort-Scan ausgeführt wird. Auch, was wäre der beste Weg, den Standort innerhalb einer Dienstleistung zu finden?
einen Alarm mit IntentService Erstellen
Die zweite Option Ich dachte an wurde der Alarm Manager wake mit bis und eine IntentService starten, die Standort-Updates beginnt (via GoogleAPIClient). Sobald ein Standort abgerufen wurde, senden Sie diese an den Server und schließen Sie die Standortaktualisierungen. Dies würde das Problem des periodischen Startens/Stoppen von Standortaktualisierungen lösen. Jedoch hatte ich nicht viel Glück, mich innerhalb des IntentService mit GoogleAPIClient zu verbinden, ohne eine Wartezeit zu setzen, und ich denke nicht, dass das die effizienteste Sache ist.
ein GcmTaskService Erstellen
Diese viele Vorteile des Alarmmanagers hat und scheint effizienter in Bezug auf Stromsparmodus zu sein, wie es den Service nur aufwacht, wenn das Telefon in einem Wartungsmodus ist, so dass es schien, als ob eine gute Lösung. Allerdings habe ich das gleiche Problem wie der IntentService, der sich mit einem GoogleAPIClient verbindet, um den Standort ohne irgendeine Art von Wartezeit zu erhalten.
Ich gehe vielleicht zu weit in das Kaninchenloch auf diesem einen und dort kann etwas offensichtlich sein, dass ich vermisse, so würde jeder Ratschlag sehr geschätzt werden.
Ja, genau das habe ich mir auch gedacht. Wie haben Sie die Verbindung mit dem GoogleAPIClient in Ihrem JobScheduler gehandhabt? Verwenden Sie das blockingConnect mit einem Timeout oder einer anderen Methode? – pkramaric
Ich verwende die nicht blockierende Methode [connect()] (https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.html#connect()) und dann I Behandeln Sie den Job abhängig vom Verbindungsergebnis (Methoden onConnected, onConnectionFailed). – kws