it-swarm.com.de

Wie bekomme ich Android GPS-Standort

Prost, ich versuche den aktuellen GPS-Standort über Android zu ermitteln. Ich folgte dieses Tutorial und Vogellas-Artikel ebenfalls. Obwohl es nicht funktioniert. Bei Verwendung von LocationManager.NETWORK_PROVIDER erhalte ich immer einen Breitengrad von 51 und einen Längengrad von 9 - egal wo ich stehe. Bei Verwendung von LocationManager.GPS_PROVIDER erhalte ich überhaupt nichts.

Obwohl bei Verwendung von GMaps alles funktioniert: S Keine Ahnung warum. Wie kann ich den aktuellen GPS-Standort wie bei GMaps ermitteln?

Hier ist mein Code:

package com.example.gpslocation;

import Android.location.Location;
import Android.location.LocationListener;
import Android.location.LocationManager;
import Android.os.Bundle;
import Android.app.Activity;
import Android.content.Context;
import Android.util.Log;
import Android.view.Menu;

public class GPS_Location extends Activity implements LocationListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gps__location);

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.gps__location, menu);
    return true;
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub

    int latitude = (int) (location.getLatitude());
    int longitude = (int) (location.getLongitude());

    Log.i("Geo_Location", "Latitude: " + latitude + ", Longitude: " + longitude);
}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

}
30
JustBasti

Hier ist dein Problem:

int latitude = (int) (location.getLatitude());
int longitude = (int) (location.getLongitude());

Breite und Länge sind double- Werte, da sie die Position in Grad darstellen.

Wenn Sie sie in int umwandeln, verwerfen Sie alles hinter dem Komma, was einen großen Unterschied macht. Siehe "Dezimalgrad - Wiki"

26
Lukas Knuth

Versuche es :

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);
     Double lat,lon;
     try {
       lat = location.getLatitude ();
       lon = location.getLongitude ();
       return new LatLng(lat, lon);
     }
     catch (NullPointerException e){
         e.printStackTrace();
       return null;
     }
    }
21
Sercan Ozdemir

Dieser Code hat ein Problem:

int latitude = (int) (location.getLatitude());
int longitude = (int) (location.getLongitude());

Sie können int in double ändern.

double latitude = location.getLatitude();
double longitude = location.getLongitude();
12
azatserzhan

Das anfängliche Problem wird gelöst, indem lat und lon in double geändert werden.

Ich möchte der Lösung einen Kommentar mit Location location = locationManager.getLastKnownLocation(bestProvider); hinzufügen. Es funktioniert, um den letzten bekannten Ort herauszufinden, an dem eine andere App dafür lisnerning war. Wenn zum Beispiel keine App dies seit dem Start des Geräts getan hat, gibt der Code Nullen zurück (ich habe in letzter Zeit einige Zeit damit verbracht, dies herauszufinden).

Es ist auch eine gute Praxis, das Abhören zu beenden, wenn dies nicht erforderlich ist, indem locationManager.removeUpdates(this);

Auch mit Berechtigungen in manifest funktioniert der Code, wenn der Ortungsdienst in Android Einstellungen auf einem Gerät aktiviert ist.

8

Auszug:-

try 
        {
          cnt++;scnt++;now=System.currentTimeMillis();r=Rand.nextInt(6);r++;
            loc=lm.getLastKnownLocation(best);
            if(loc!=null){lat=loc.getLatitude();lng=loc.getLongitude();}

            Thread.sleep(100);
            handler.sendMessage(handler.obtainMessage());
         } 
        catch (InterruptedException e) 
        {
            Toast.makeText(this, "Error="+e.toString(), Toast.LENGTH_LONG).show();
        }

Wie Sie oben sehen können, wird ein Thread neben dem Hauptthread der Benutzeroberflächenaktivität ausgeführt, der fortlaufend die aktuelle Uhrzeit und einen zufälligen Würfelwurf anzeigt.

Wenn Sie neugierig sind, überprüfen Sie einfach den vollständigen Code: GPS-Standort mit einem zufälligen Würfelwurf und der aktuellen Zeit in einem separaten Thread

0