Ich beschäftige mich damit, GPS-Daten kontinuierlich auf meinem eigenen Handy (Galaxy XCover 4s) zu empfangen AUCH wenn die App beendet werden sollte.
Ich versuche damit privat z.B. meine Arbeitszeit zu registrieren.
Ich mache das in Python Kivy/KivyMD mit dem Modul plyer.
Das was funktioniert ist, dass ich solange die App geöffnet habe, d. h. solange das kleine Standortsymbol in der oberen Leiste im Handydisplay zu sehen ist, ich GPS-Daten empfange und
in einem Label auf dem Display angezeigt bekomme. Diese Daten schreibe ich immer wenn sie dann ankommen, direkt in eine Datenbank. Dann lese ich direkt nach dem Speichern den letzten
Datenbankeintrag aus (die ID des jeweilig letzten Datenbankeintrags).
In meiner App habe ich also ein Label mit den GPS-Daten
Code: Alles auswählen
self.lb_gps_data = (
f"{lat}\n{lon}\n{speed}\n{bearing}\n{altitude}\n{accuracy}")
Code: Alles auswählen
self.lb_table_id = db_last_value
Hier ein Codeausschnitt (ohne Datenbank):
Code: Alles auswählen
class GPSBackgroundThread(Thread):
def __init__(self, dispatcher):
super(GPSBackgroundThread, self).__init__()
self.gps_db_name = 'DB_Name'
self.tbl_name = 'Tabellenname'
self.db = Datenbank(self.gps_db_name)
self.db.create(self.tbl_name)
self.dispatcher = dispatcher
def run(self):
gps.configure(on_location=self.on_location)
gps.start(minTime=1000, minDistance=1)
def on_location(self, **kwargs):
(lat, lon, speed, bearing, altitude, accuracy) = (
kwargs["lat"], kwargs["lon"], kwargs["speed"], kwargs["bearing"], kwargs["altitude"], kwargs["accuracy"])
data = [(lat, lon, speed, bearing, altitude, accuracy)]
self.db.write(self.tbl_name, data)
db_last_value = f"{self.db.fetchone_last(self.tbl_name)}"
self.dispatcher.send_gps_data(lat, lon, speed, bearing, altitude, accuracy, db_last_value)
class GPSDataDispatcher(object):
def __init__(self):
self.handlers = []
def bind(self, handler):
self.handlers.append(handler)
def send_gps_data(self, lat, lon, speed, bearing, altitude, accuracy, db_table_id):
for handler in self.handlers:
handler(lat, lon, speed, bearing, altitude, accuracy, db_table_id)
class GPS(Screen):
lb_gps_data = StringProperty()
lb_bd_value = StringProperty()
def __init__(self, **kwargs):
super(GPS, self).__init__(**kwargs)
self.dispatcher = GPSDataDispatcher()
self.dispatcher.bind(self.update_gps_data)
@mainthread
def update_gps_data(self, lat, lon, speed, bearing, altitude, accuracy, db_table_id):
self.lb_gps_data = (
f"{lat}\n{lon}\n{speed}\n{bearing}\n{altitude}\n{accuracy}")
self.lb_bd_value = db_table_id
Sobald ich aber die App wegwische oder in den Hintergrund setze, verschwindet das Standortsymbol und mein schöner Thread beendet seine Aufgabe.
Ich habe gehofft, das ein Thread vielleicht weiterläuft, auch ohne Standortsymbol
In den Einstellungen meines Handys bin ich schon auf Apps/MeineApp/Standort gegangen und habe gesehen, dass man max. nur "Zugriff nur während der Nutzung der App zulassen"
aktivieren kann. Das ist doof!
Gibt es da eine Möglichkeit, wie man auch mit ausgeschalteter App kontinuierlich GPS-Daten empfangen kann oder ist das als Schutzmaßnahme einfach komplett untersagt?