GPS im Hintergrund reduziert?

J

joerg69

Fortgeschrittenes Mitglied
114
Moin,

Ich nutze mehrere Apps, die im Hintergrund die Position tracken. Teilweise gewollt recht aggressiv, es geht um's Thema Wandern, und die Konsequenzen für den Akku sind klar.

Seit längerer Zeit habe ich das Gefühl, dass das nur so mässig klappt. Soll eine App die Position 2minütlich speichern, sieht das im Ergebnis eher so aus, als wäre alle 10-15 Minuten ein Punkt getrackt worden.

Auch in der Google Location History sieht es so aus - war ich z.B. in 2 Supermärkten, hat Google nur einen davon mitbekommen.

In den Energieeinstellungen ist für diese Apps alles hochgeschraubt, kein Autokill.

Jetzt bin ich gestern auf die Idee gekommen, einfach mal eine dieser App im Vordergrund zu lassen, und das Handy ein paar Minuten wach zu halten. Bingo! Ich erhalte nun einen GPS-Track, der auch den Einstellungen der App entspricht!

Es scheint, als würde GPS-Tracking im Hintergrund vom System gethrottled. Der Tracker darf tracken, er wird auch nicht gekillt, nur darf er eben nicht so oft, wie er will.

Kann man da was machen?

(Bitte nicht davon irritieren lassen, dass ich im Screenshot scheinbar durch's „nichts“ laufe - der lila Track folgt exakt einem nicht eingezeichneten Trampelpfad, der ist perfekt. Der grüne Track ist Mist, man sieht nichtmal, welche Strasse ich gewählt habe)
 

Anhänge

  • SCR-20221013-nqc.png
    SCR-20221013-nqc.png
    458 KB · Aufrufe: 85
Zuletzt bearbeitet:
@joerg69

Grundsätzlich wird die Position nicht mehr von einer App aktiv ermittelt/berechnet, sondern vom System "geliefert" - eine Art Abonnement der App an das System.
Die Positionsermittlung und Interval wird ausschließlich vom System durchgeführt, und wenn es etwas "Neues" gibt, an die Apps ausliefert, die die Ortung beim Start angefordert/abonniert haben .

Jede App, die also einen Auswertung vornimmt, sollte nach Möglichkeit aus der Akkuoptimierung heraus genommen werden und besonders die Hintergrundaktivität zugelassen sein. (Also Einzeln im Setup der App eingestellt)
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: joerg69
@swa00 Ich vermute, dass das hier so nicht stimmt.

Was Du meinst, sind die Location Provider. Die ermitteln eine Position nach einem kaskadierenden Prinzip, ich meine das sind GPS, Netzwerk (Wifi) und Mobilfunk und melden es dann der App zurück.

Typisch ist sowas z.B. für die Camera.app oder das GoogleMaps Location Tracking: Wenn ich im Hamburger Hafen fotografiere und nicht schnell genug GPS ermittelt wurde, dann ist der Standort immer der gleiche: Einer der Masten, der das Funknetz für den Hamburger Hafen liefern. Hier als Beispiel, was GoogleMaps gespeichert hat:

Screenshot 2022-10-13 201737.png
Die wilden Sprünge sind Netzwerk- statt GPS-Ortungen.

Das ist aber bei den ganzen Wander/Tracking-Apps anders. Entweder basieren die eh nur auf GPS, oder Du kannst gezielt auswählen, welche Provider erwünscht sind. Der Grund ist ja aus obigem Screenshot ersichtlich, tolle Fahrradtour habe ich da gemacht, sieht eher aus wie ein Ironman :)

Die App, von der ich spreche, ist übrigens GPSLogger , GitHub - mendhak/gpslogger: Lightweight GPS Logging Application For Android. , und ich habe explizit nur GPS als Provider erlaubt.

Die gleiche Tour wie oben hat auch der GPSLogger mitgeschnitten:
Screenshot 2022-10-13 203052.png

Mal abgesehen von meinem Problem, dass er zu selten loggt (das ist ja mein Problem...), ist das schon deutlich besser.

Zum Vergleich: Folgender Track entstand mit der gleichen App vor 6 Jahren auf einem deutlich schwächeren Handy, aber zu einer Zeit, als das OS noch nicht "reingegrätscht" hat:
Screenshot 2022-10-13 203714.png

Da würde ich gern wieder hinkommen.

EDIT: Nachtrag, wie gesagt: GPSLogger habe ich sowieso aus der Akku-Optimierung rausgenommen.
 
Zuletzt bearbeitet:
@joerg69

Ich vermute, dass das hier so nicht stimmt.

So leid es mir auch tut, doch es stimmt leider : :)

Da ich schon seit Jahren den Locationservice unter Android implementiere ,ist es auch keine Vermutung sondern Fakt.
In der Vergangenheit hat sich Vieles massiv verändert, insbesondere an der Erlaubnis , solche Tracking Apps im Hintergrund aktiv zu lassen (Dazu weiter unten)


Die heutige Positionsermittlung :

Zum Vergleich: Folgender Track entstand mit der gleichen App vor 6 Jahren auf einem deutlich schwächeren Handy, aber zu einer Zeit, als das OS noch nicht "reingegrätscht" hat:

Richtig, bis zu ~Android 5/6 konnten Apps direkt auf die Empfänger/Provider zugreifen.

Nun dürfen/können das diese Apps grundsätzlich nicht mehr, sondern nur über den Google Service, der als Abonenntenträger (Broker) fungiert - anfragen.- Mittels "Rückmelder" (Listener/Callback) muss gewartet werden, bis das System gewillt ist, die GEODaten zu liefern.
Der Broker liefert dann - je nach Einstellung - alle drei verfügbaren Provider kombiniert. (GPS / GSM-Triangular / (Festnetzprovider/WLAN))

Standardmäßig wird nur alle 60 Sekunden eine App mit neuen GEODaten versorgt.
Ein kürzeres Intervall kann bis zu 1000ms angefordert werden, wird aber meist nicht erreicht.
2000ms für eine NavigationsApp ist da ausreichend.

Siehe hierzu die aktuellen detaillierten Google Beschreibung in der API Original-Dokumentation:
Get the last known location | Android Developers
FusedLocationProviderClient | Google Play services | Google Developers


Die App, von der ich spreche, ist übrigens GPSLogger , GitHub - mendhak/gpslogger: Lightweight GPS Logging Application For Android. , und ich habe explizit nur GPS als Provider erlaubt.

Eine App muss auch das Obige nach den neusten Richtlinien umsetzen. Der Location-Kern dieser App stammt aus dem Jahre 2016 und ist eindeutig veraltet. Er bedient sich zwar auch schon meinem oben erwähnten Listeners, aber in einer sehr sehr frühen Form.
gpslogger/GeneralLocationListener.java at master · mendhak/gpslogger




Die Hintergrundaktivität - Dein "Hauptproblem"

Auf der Seite des Entwicklers ist zu lesen: GPSLogger for Android
Ab Android 8 gibt es also nur unregelmäßig "einige" Updates in der Stunde, wenn die App im Hintergrund läuft.

Warum ? - man beachte auch die wachsweiche Ausdrucksweise "only a few times"
Der z.B. von dieser App verwendete Foregroundservice gibt es nicht mehr in dieser Form, ist damit quasi sinnlos und ist abhängig vom System und dessen "Eigenwilligkeit". (Stark Hersteller spezifisch)

Nicht nur im Hintergrund, auch im DOZE Modus wären jede Menge Anpassungen notwendig.
Alleine im DOZE-Mode kommt man mittlerweile um einen eigenen Server nicht mehr drumrum, um das Gerät für das Logging kurzzeitig aufzuwecken. (FCM High-Priority Push) Optimize for Doze and App Standby | Android Developers

Das bieten viele der Entwickler natürlich nicht, weil es mit laufenden Kosten verbunden wäre.
Zumal dieser Service im Intervall limitiert ist : About FCM messages | Firebase Cloud Messaging

DOZE Modus : Bildschirm aus, kein Netzteil - Gerät eine Zeitlang interaktiv nicht benutzt.
Es werden alle unrelevanten Funktionen abgeschaltet, es sei denn, sie sind von Google für eine explizite App autorisiert
Samsung legt i.d.R. schon bei ~10 Minuten los.


Jetzt bin ich gestern auf die Idee gekommen, einfach mal eine dieser App im Vordergrund zu lassen, und das Handy ein paar Minuten wach zu halten. Bingo! Ich erhalte nun einen GPS-Track, der auch den Einstellungen der App entspricht!
Das Verhalten dieser Apps ist absolut korrekt, sie entsprechen den aktuellen Richtlinien.

Auch hier ein "Warum ?"
Lt. Google Sicherheits-Richtlinien muss eine App, die ein Tracking eine Zeitlang im Hintergrund erlaubt, einen eindeutigen "Mehrwert" für den Nutzer nachweisen.
Dies muss schriftlich bei Google eingereicht und genehmigt werden. (Siehe Antragsformular im folgenden Link)
Ist die App genehmigt worden, so wird sie dafür im System/Store freigeschaltet - Wenn nicht, liefert der Broker schlichtweg keine Daten aus.

Eine gewöhnliche Wanderapp oder sogar eine selbst erstellte App gehören nicht dazu und die Latte der Hürde ist sehr sehr hoch.
Requesting access to location in the background - Play Console Help



Es scheint, als würde GPS-Tracking im Hintergrund vom System gethrottled. Der Tracker darf tracken, er wird auch nicht gekillt, nur darf er eben nicht so oft, wie er will.
Kann man da was machen?

Nichts kannst du machen
Es sei denn, du schreibst den obigen Code auf die neuste Technik um & installierst dir einen FCM Server, oder verwendest ein Smartphone mit bis zu Android 6.

Alternativ dazu natürlich einen Dienstleister/Hardware verwenden , der Dir das alles als "Rundum-Sorglos" Paket anbietet.
- oder
für ~ 100 - 120 Euro eine GPS Smartwatch
 

Anhänge

  • 1665695951395.png
    1665695951395.png
    25,5 KB · Aufrufe: 81
Zuletzt bearbeitet:
@swa00 Hallo,
bedeutet das ich kann mit meiner selbst erstellten App nicht mehr auf Standortdaten auf meinem Telefon im Hintergrund zugreifen?
Diese Funktion ist für meine App aber nötig da mich die App warnen soll wenn ich die Route verlasse und dabei ist das Telefon in der Hosentasche.

Grüße Martin
 
Zuletzt bearbeitet:
@Inse60

Hallo Martin

Richtig, der Locationservice gibt dir keinen Callback mehr , wenn die App nicht im Vordergrund ist ..
Access location in the background | Android Developers

Nur explizit von Google genehmigte Apps werden damit versorgt.
Und wie schon erwähnt , die Hürde ist nur schwer nicht erreichbar.

Zitat :
Note: The Google Play store has updated its policy concerning device location, restricting background location access to apps that need it for their core functionality and meet related policy requirements. Adopting these best practices doesn't guarantee Google Play approves your app's usage of location in the background.

Learn more about the policy changes related to device location.
 
Zuletzt bearbeitet:
Danke. Dann wird es Zeit die Hardware zu wechseln (was mit Linux wäre gut) oder noch irgendwo ein Telefon mit Android 4.2.2 zu ergattern.

Grüße Martin
 
  • Danke
Reaktionen: joerg69
Weiss zufällig jemand, ob es ein Custom ROM gibt, mit dem man das wieder selbst bestimmen kann?
 
Ist mir leider nicht bekannt .
CustomRoms setzen i.d.R. auch nur auf bestehende Kernels resp. den Treibern des Herstellers auf.
 
Sicher, aber in diesem Fall bedürfte es ja nur einer Änderung eines festen Wertes. Vanilla Android erlaubt den Event halt alle sagenwirmal 300 Sekunden, und ich hätte da gern eine 5. Im Prinzip also keinerlei Codeänderungen, nur 'ne Konstante/Variable/Zahl, vermutlich ist der Wert sogar bereits parametrisiert.

Da ich vermutlich nicht der einzige Nutzer weltweit bin, der seine Wanderungen trackt, könnte ich mir gut vorstellen, dass ein CustomROM da schon „liefert“. Und da die Lebenszeit meines OnePlus Nord eh dem Ende zugeht…
 

Ähnliche Themen

Bondar
Antworten
0
Aufrufe
2.599
Bondar
Bondar
Marsho
Antworten
4
Aufrufe
1.427
MuP
M
N
  • n8flight
Antworten
6
Aufrufe
1.713
n8flight
N
Zurück
Oben Unten