Seite 1 von 1

GPS kontinuierlich empfangen?

Verfasst: Mittwoch 28. Februar 2024, 21:13
von DMD-OL
Hi Leute
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}")
und darunter den letzten Datenbankeintrag in einem zweiten Label:

Code: Alles auswählen

self.lb_table_id = db_last_value
Die GPS-Daten erhalte ich durch einen Thread, der im Hintergrund läuft, und der mit einem Dispatcher kommuniziert, um mir dann wieder zurückgeschickt werden zu können.
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
Solange ich also das Standortsymbol sehen kann, erhöht sich immer der Datenbankeintrag (also die 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?

Re: GPS kontinuierlich empfangen?

Verfasst: Mittwoch 28. Februar 2024, 22:26
von sparrow
Hatten wir das nicht schon mal hier?

Re: GPS kontinuierlich empfangen?

Verfasst: Donnerstag 29. Februar 2024, 07:18
von __deets__
Es gibt ein freies Projekt, das behauptet das zu können. https://github.com/mendhak/gpslogger

Entweder benutzt du gleich das, oder du schaust, was die machen, damit das dauerhaft aufzeichnet. Wenn’s stimmt.

Re: GPS kontinuierlich empfangen?

Verfasst: Sonntag 3. März 2024, 14:27
von DMD-OL
Das Beispiel ist in .java geschrieben :(
Das kenne ich nicht so wirklich. Mist

Re: GPS kontinuierlich empfangen?

Verfasst: Sonntag 3. März 2024, 14:30
von DMD-OL
@sparrow: Das was wir schon mal hatten, bezog sich auf das reine Empfangen von GPS-Daten, womit ich Probleme hatte.

Re: GPS kontinuierlich empfangen?

Verfasst: Sonntag 3. März 2024, 15:08
von __deets__
DMD-OL hat geschrieben: Sonntag 3. März 2024, 14:27 Das Beispiel ist in .java geschrieben :(
Das kenne ich nicht so wirklich. Mist
Man kann das durchaus ausreichend verstehen, um daraus was abzuleiten. Vor allem aber ob es überhaupt möglich ist.