Google maps api v2 mit aktuellen position

  • Antworten:7
Flöö
  • Forum-Beiträge: 7

28.05.2016, 14:28:02 via Website

Hallo Zusammen,

ich will in meine Trainingsapp eine Google Maps Karte einbinden und dort alle 10 sec ein neuer Punkt von einer Polyline setzten. Mein Problem ist jetzt das ich wenn ich die Position auslese immer in der App drin sein muss, ich habe bis jetzt nur herraus gefunden das ich einen Background Service benutzen muss. Leider versteh ich nicht wie ich den Service einbinde damit ich in der Activity die Position zurückbekomme. Ich habe schon so gut wie alle Google, Forum, Stackoverflow beiträge gelesen und versteh es einfach nicht oder es steht wirklich nirgens beschrieben. Auch hab ich natürlich schon bei Android Dvelopers reingelesen aber auch dort weiß nicht wie ich das bei mir einbinden soll.

Hoffe auf Antworten
Lg Flöö

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.05.2016, 14:55:57 via Website

Hallo Flöö,
dein Vorhaben wird so nicht funktionieren, da wenn die App nicht offen ist, es auch keine Activity gibt.
Somit kannst du die GPS Pos daten nur in die Main zurückbekommen wenn diese offen ist.
Ansonsten muss der Service sich die Punkte speichern und diese soblad die App wieder aktiv ist, an die Main übermitteln.
Dann muss die Activity halt die alten Punte auch verarbeiten

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Flöö
  • Forum-Beiträge: 7

28.05.2016, 15:26:36 via Website

Danke für die schnelle Antwort.

Das hatte ich mir schon gedacht, ich speicher die Daten nun in einer Datenbank und wenn ich die App wieder aufrufe muss ich die Daten neu auslesen.(Am besten mit OnResume/OnStart oder?) Aber wie mach ich das wenn man in der App ist und dort bleibt, muss ich dann auch mit einem Zeitintervall die Daten aus der Datenbank holen bzw. läuft der Service auch dann noch?

Gibt es da ne bessere Lösung als wie das ganze in eine Datenbank zwischen zuspeichern?

LG

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.05.2016, 15:59:57 via Website

Die DB ist ja nur fürs Dauerhafte speichern, die brauchst du ja nicht fürs Zwischenspeichern.
Ich hätte gesagt, du startest die App, daten aus der DB werden gelesen (würde das in eine Init Methode tun und diese aus onCreate aufrufen)
Dann startest du den Service und bekommst vom Service einen Callback mit der Position die du dann weiterverwendest, speicherst etc.
Sobald dein Service (Background Service, löuft auch wenn App zu) merkt, dass keine Activity da ist, speichert er sich die Daten in z.b. einer HashMap oder ArrayList.
Sobald er wieder "verbindung" zur Activtiy hat, übermittelt er dir die Liste der im nicht aktiven Appzeitraum gesammelten Daten.
Damit sollte es doch erledigt sein oder?

— geändert am 28.05.2016, 16:00:12

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Flöö
  • Forum-Beiträge: 7

28.05.2016, 16:25:25 via Website

Vielen dank für die Infos, werde mich jetzt mal dran machen das umzusetzten, sonst melde ich mich wieder :)

Edit:

  1. Äh was macht eine Init Methode bzw wie setzte ich sie ein? finde dazu nichts ^^
  2. Wie schaue ich ob ein Service wieder eine Verbindung hat? Und wie übergebe ich die Daten?

— geändert am 28.05.2016, 16:32:48

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.05.2016, 16:36:22 via Website

Hmm,

init methode ist einfach:
private void init()
{
//hier dein Code für dei DAten aus der DB
}

un in der onCreate: init();
Fertig :)



Das mit dem sErvice kann ich dir nicht sagen, hab noch nie mit Android Services gearbeitet.
Aber man müsste ein Callback vom Service in die App hinbekommen und damit die Daten übergeben

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Flöö
  • Forum-Beiträge: 7

28.05.2016, 16:38:59 via Website

Achso das ist ne eigene Methode

Danke, wahrscheinlich bis gleich ^^

Antworten
pepperonas
  • Forum-Beiträge: 434

01.06.2016, 16:56:18 via Website

Hallo Flöö,
habe eine sehr ähnliche App gemacht. Also LocationClient bezieht (je nach Akkuzustand "ladend" oder "entladend") alle 1000ms bzw. 5000ms Ortungsupdates und speichert diese in einer DB (aus einem Service heraus). Eine Map zeigt dann die aufgezeichneten Positionen an.
Kannst dich am Code frei bedienen :)
Projekt auf Github

Viel Erfolg.

Open Source

Antworten