2013-05-11 19 views
28

Cheers, sto cercando di ottenere l'attuale posizione GPS tramite Android. Ho seguito anche this Tutorial e Vogellas article. Sebbene non funzioni. Quando si utilizza LocationManager.NETWORK_PROVIDER ricevo sempre una latitudine di 51 e una longitudine di 9, indipendentemente da dove mi trovo. Quando utilizzo LocationManager.GPS_PROVIDER, non ottengo nulla.Come ottenere la posizione GPS per Android

Sebbene tutto funzioni quando si utilizzano GMaps: S Nessuna idea del perché. Come posso ottenere l'attuale posizione GPS come GMaps?

Ecco il mio codice:

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 

} 

} 
+2

Per un di più alto livello e il modo più semplice per ottenere la posizione GPS, è possibile utilizzare questa libreria: https://github.com/delight-im/Android-SimpleLocation – caw

+0

controlla http: // stackoverflow.com/domande/1513485/how-do-i-get-the-corrente-gps-location-programmazione-in-android/38.897.436 # 38897436 –

risposta

25

Ecco il problema:

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

Latitudine e longitudine sono double -Valori, perché rappresentano la posizione in gradi.

Trasferendoli a int, stai scartando tutto dietro la virgola, il che fa una grande differenza. Vedere "Decimal Degrees - Wiki"

+1

già pensato che sarebbe stato qualcosa di stupido. Lo hai provato: P Ty – JustBasti

+0

@JustBasti dovresti contrassegnarlo come risposta. –

+0

yeh hai appena dimenticato: P thx – JustBasti

20

fare un tentativo:

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; 
    } 
    } 
+4

Grazie per la risposta, anche se ho provato il tuo codice di cui sopra già e appena tagliato il mio codice per la soluzione più semplice visualizzare il problema; P Grazie comunque – JustBasti

12

Questo codice ha un problema:

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

È possibile modificare int a double

double latitude = location.getLatitude(); 
double longitude = location.getLongitude(); 
6

Il problema iniziale è risolto modificando lat e lon di raddoppiare.

Desidero aggiungere un commento alla soluzione con Location location = locationManager.getLastKnownLocation(bestProvider); Funziona per trovare l'ultima posizione nota quando altre app lo stavano leggendo. Se, ad esempio, nessuna app lo ha fatto da quando il dispositivo è stato avviato, il codice restituirà degli zeri (ho trascorso un po 'di tempo da solo di recente per capirlo).

Inoltre, è una buona pratica per smettere di ascoltare, quando non v'è alcuna necessità di che locationManager.removeUpdates(this);

Inoltre, anche con le autorizzazioni in manifest, il codice funziona quando il servizio di localizzazione è abilitata nelle impostazioni di Android su un dispositivo.

0

Estratto: -

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(); 
     } 

Come potete vedere sopra, un thread è in esecuzione a fianco filo conduttore delle attività di interfaccia utente che consente di visualizzare in modo continuo lat GPS, lungo alongwith ora corrente e un tiro di dadi casuale.

se siete curiosi poi basta controllare il codice completo: GPS Location with a randomized dice throw & current time in separate thread

Problemi correlati