Aktuelle GPS Location kann nicht ausgelesen werden

  • Antworten:11
MrHarrison
  • Forum-Beiträge: 6

13.08.2017, 12:51:41 via Website

Hey

Zurzeit arbeite ich an einer App, in der ich den aktuellen Standort in einen Mail Client übergeben will. Zu diesem Zweck möchte ich zuerst die Koordinaten ermitteln, diese anschliessend mit einer Variable definieren und durch das einsetzen der Variable in die Mail übermitteln.

Das übermitteln der Variable in die E-Mail klappt ohne Probleme, allerdings wird die aktuelle Position nicht in die Variablen überschrieben.

Dies wäre der (von mir aus gesehen) relevante Code:

public LatLng getLocation()
{
    // Get the location manager
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String bestProvider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(bestProvider);




    //^ muss Fehler beinhalten, da Location 0.0 ausgegeben wird.
    // in der API nachlesen, Funktion genauer kennen lernen -> Problem finden

    try {


        lat = location.getLatitude();
        lon = location.getLongitude();
        //überschreiben der Variabeln lon & lat funktioniert

        return new LatLng(lat, lon);
    }
    catch (NullPointerException e){
        e.printStackTrace();
        return null;
    }
}

Für die E-Mail habe ich einen Button, wobei beim Klicken die Methode 'getLocation' ausgeführt werden sollte bevor die Daten übergeben werden.

Die App läuft, aber die Koordinaten werden nicht überschrieben - ich erhalte immer den Standard-Wert 0.0.

Und ja, die Berechtigung für GPS habe ich im Manifest gegeben.

Ich hoffe, dass mir hier jemand helfen kann :)

Antworten
swa00
  • Forum-Beiträge: 3.704

13.08.2017, 13:02:24 via Website

Hallo Mr.Harrison,

Dein Code oben kann nicht funktionieren , da Du die wesentliche Komponente - den Listener
gar nicht implementiert hast.

Nur dann , wenn das Callback kommt , ist die Position gültig
https://developer.android.com/reference/android/location/LocationListener.html

— geändert am 13.08.2017, 13:03:31

Liebe Grüße - Stefan
[ App - Entwicklung ]

LudyMrHarrison

Antworten
MrHarrison
  • Forum-Beiträge: 6

13.08.2017, 13:04:34 via Website

Und wie kann ich den implementieren?

Kannst du mir am besten ein (einfaches/simples) Codebeispiel geben?

Antworten
swa00
  • Forum-Beiträge: 3.704

13.08.2017, 13:12:48 via Website

Das Netz ist eigentlich voll damit

Hier mal auf die Schnelle :
https://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/

P.S Du verwendest allerdings eine "veraltete" Technik. Die von dir angewandte Richtung
berücksichtigt nur den GPS Sensor bei einem FIX.

Ansonsten solltest du eher die GoogleApiClient API nehmen (play-services-location)
Dann hast du auch WLAN und Triangulare GMS Ermittlung
(Auch dazu gibt es Tutorials)

— geändert am 13.08.2017, 13:13:28

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
MrHarrison
  • Forum-Beiträge: 6

13.08.2017, 13:13:01 via Website

Hmmm, ich kann also folgendes einbauen:

void requestLocationUpdates (String provider, 
                long minTime, 
                float minDistance, 
                LocationListener listener)

Aber wie komme ich dann an die Latitude bzw. Longitude und wie kann ich diese dann einzelnen Variablen zuordnen?

Die Hilfeseite von Google hilft mir leider nicht wirklich weiter..

Antworten
swa00
  • Forum-Beiträge: 3.704

13.08.2017, 13:15:05 via Website

Siehe Beitrag oben

Liebe Grüße - Stefan
[ App - Entwicklung ]

MrHarrison

Antworten
MrHarrison
  • Forum-Beiträge: 6

13.08.2017, 13:20:17 via Website

Folgender Code ist wahrscheinlich der für mich relevante, oder?

 if (isGPSEnabled) {
                    if (location == null) {
                        locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (locationManager != null) {
                            location = locationManager
                                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }

wobei ich mich frage, ob die ganzen 'if' Geschichten wirklich notwendig sind. Kann ich den Code, nachdem ich 'isGPSEnabled' definiert habe, in meinen Code reinkopieren? Wenn man den aber mit meinem Code vergleicht, ist eigentlich nur die .requestLocationUpdates Funktion neu, oder? Speichert die dann die Latitude & Longitude in einer Art Zwischenspeicher, woraus ich sie mittels getLatitude und getLongitude abrufen kann?

Danke aber schonmal für die schnelle Hilfe!

Antworten
swa00
  • Forum-Beiträge: 3.704

13.08.2017, 13:25:12 via Website

Anmerkung :

Folgender Code ist wahrscheinlich der für mich relevante, oder?

Programmierung hat NICHTS mit Paste & Copy zu tun, sondern mit Lesen & Verstehen.

Die Flag-Abfragen haben durchaus ihre Berechtigung - ansonsten wirst Du gleich wieder hier
aufschlagen , das was nicht richtig funktioniert :-) (Siehe Sensor Berechtigung)

Ich würde dir an dieser Stelle empfehlen, dich mal ein wenig in die Grundlagen einzuarbeiten,
Vor allem was Listener / Callbacks betrifft und wozu sie da sind.

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
MrHarrison
  • Forum-Beiträge: 6

13.08.2017, 13:31:23 via Website

swa00

Die Flag-Abfragen haben durchaus ihre Berechtigung - ansonsten wirst Du gleich wieder hier
aufschlagen , das was nicht richtig funktioniert :-) (Siehe Sensor Berechtigung)

Ich habe die Berechtigungen im Manifest gegeben und setze voraus, dass GPS aktiviert & der Zugriff gewährt ist. Von daher sollte es meinem Verständnis nach nicht der Fall sein.

Ich würde dir an dieser Stelle empfehlen, dich mal ein wenig in die Grundlagen einzuarbeiten,
Vor allem was Listener / Callbacks betrifft und wozu sie da sind.

Sicherlich eine gute Idee, jedoch fehlt mir aktuell die Zeit dafür.

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

13.08.2017, 13:32:03 via App

Hallo MrHarrison,

herzlich willkommen hier im Forum (*)

ich habe deinen Thread in den passenden Bereich verschoben.

Schau mal in meinem git wie es aussehen könnte.
https://github.com/Ludy87/AndroidPIT/tree/master/LocalLocation

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

swa00

Antworten
swa00
  • Forum-Beiträge: 3.704

13.08.2017, 13:34:35 via Website

Ich habe die Berechtigungen im Manifest gegeben und setze voraus, dass GPS aktiviert & der Zugriff gewährt ist. Von daher sollte es meinem Verständnis nach nicht der Fall sein.

Und genau das ist nicht der Fall.
Alleine die Berechtigung in der Manifest recht dazu nicht aus.

Der GPS Sensor - und ich habe nicht umsonst auf die veraltete Technik von dir hingewiesen -
ist ein sicherheitsrelvantes Teil , welchen NUR von User manuel zu erlauben ist .
Diese Abfrage ist Zwingend notwenig und ist auch weiter unten im oben genannten Tutorial
erwähnt.
Ab SDKLevel 19 ändert sich das im übrigen wieder

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
MrHarrison
  • Forum-Beiträge: 6

13.08.2017, 13:38:34 via Website

@Ludy dankeschön!

@swa88 Ich habe das so gelöst, dass bei App Start jeweils eine Berechtigungsabfrage kommt. Dort hat man die Möglichkeit, das für immer zu erlauben. Die Berechtigungsabfrage erfolgt also.

Würde es helfen, wenn ich den ganzen Code poste bzw. eventuell per PN (wenn es das hier gibt) schicke?

Antworten