2017-01-19 1 views
1

Meine App verfügt über eine Karte und wenn der Benutzer lange darauf drückt, muss der aktuelle Standort des Telefons auf der Karte angezeigt werden. Als @Chen advised sieht es aus wie getCurrentLocation() ist die richtige Methode in meinem Fall zu verwenden. Bitte beachten Sie, dass ich keinen LocationListener verwenden möchte, da ich möchte, dass der Benutzer die Kontrolle darüber hat, wann er seinen Standort aktualisieren möchte.Wie kann ich die getCurrentLocation-Methode (Codename One Location Manager) unterbrechen?

Darüber hinaus wählte ich diese manuelle Standortaktualisierung, weil @ Shai-Almog discouraged location polling. So nach post Lektüre dieses stelle ich zuerst das Timeout auf 20 s, wie unten geschrieben, um den aktuellen Standort des Telefons zu erhalten:

   Dialog ip = new InfiniteProgress().showInifiniteBlocking(); 
       Location currentLocation = locationManager.getCurrentLocationSync(
         ParametresGeneraux.LOCATION_TIMEOUT_MILLI); 
       // We try to get something 
       if (currentLocation == null) { 
        currentLocation = locationManager.getLastKnownLocation(); 
       } 
       ip.dispose(); 

Aber es war nicht ausreichend und die letzte bekannte Position war „immer“ zur Verfügung gestellt (ich nicht zählen vielleicht 5 Mal in Folge), obwohl das kleine Standortsymbol in der Symbolleiste erschien. Also habe ich es auf 40 s eingestellt, aber der tatsächliche aktuelle Standort kam auch nach dieser doppelt so großen Zeit nicht (nur der letzte bekannte Standort, der> 2 km entfernt ist, wurde bereitgestellt).

Wenn ich jedoch Google Maps auf Android (KitKat) starte, ist der Standort sofort korrekt. Und wenn ich dann zu meiner App zurückkehre und auf die Karte drücke, wird der aktuelle Standort gefunden. Tatsächlich habe ich einen gefunden, der sich mit einem Unterschied in der Genauigkeit zwischen Google Maps und Android API befasst, aber er bezieht sich auf Shangai/China, nicht auf die EU (Frankreich).

Folglich meine Frage ist zweifach:

  1. zuerst wie kann es so ein großer Unterschied auf dem gleichen Gerät zwischen Google Maps und Codename One?

  2. dann, wenn ich keine Zeitüberschreitung auf getCurrentLocation() wie kann ich die Ort Suche unterbrechen, wenn der Benutzer satt ist warten?

Jede Hilfe dankbar,

BR

Antwort

1

Instant-Standort wird funktionieren, wenn die Google Maps Ortungsdienste aktiviert ist. Wenn Sie einen Build-Hinweis android.playService aktiviert oder deaktiviert haben, müssen Sie auch android.playService.location=true aktivieren, um den von Karten verwendeten schnellen Standortdienst zu erhalten.

+0

Awesome, danke eine Tonne @Shai! Hinzufügen android.playService.location = True zu den Build-Tipps macht den aktuellen Standort schneller erscheinen ([mehr Details auf CN1 Blog] (https://www.codenameone.com/blog/ a-danke-eine-wichtige-update-on-android-builds.html)). Bis jetzt ist es immer noch nicht korrekt, aber Google Maps funktioniert auch nicht, also kann ich keinen Vergleich machen. Übrigens hast du meine andere [Frage] gesehen (http://stackoverflow.com/questions/41695584/button-in-codename-one-form-inactive-on-android-actual-device- but-work-under- Si)? – HelloWorld

+0

Ich habe diese Frage verpasst, hast du vergessen, es zu markieren? –

+0

Nein, ich habe nicht vergessen, war nur überrascht, weil Sie immer schnell antworten. Trotzdem danke, dass du geantwortet hast! – HelloWorld