2013-03-26 13 views
6

ich den folgenden Code verwende jetzigen Standort von einem Netzwerkanbieter in meiner Anwendung zu bekommen:Genauen aktuellen Standort von Network Provider

LocationManager mgr = (LocationManager) getSystemService(LOCATION_SERVICE); 
boolean network_enabled = mgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
if(network_enabled){ 
Location location = mgr.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

Aber es gibt einen Ort ca. 300-700 Meter entfernt von meinem aktuellen Standort.

Dies wird von einem Netzwerkanbieter erwartet. Aber das Problem ist:

mit nur dieser Netzbetreiber aktiviert ist, und kein GPS, ich openned Foursquare Anwendung, wo es genau meine aktuelle Position zeigt, wo ich bin. Jetzt wenn ich wieder zu meiner Anwendung komme, zeigt es die genaue aktuelle Ort oder sagen Sie den gleichen Ort, die Foursquare zeigte.

Das Gleiche gilt für Google-Apps wie Navigator geschieht, Karten etc ..,

Wie kann dies geschehen? Wie können andere Apps genau den Standort ermitteln, der auf dem Netzwerkanbieter basiert?

komplette Code:

public class MyLocationActivity extends Activity implements LocationListener { 
    private LocationManager mgr; 
    private String best; 
    Location location; 
    public static double myLocationLatitude; 
    public static double myLocationLongitude; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mgr = (LocationManager) getSystemService(LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     best = mgr.getBestProvider(criteria, true); 
     location = mgr.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     dumpLocation(location); 
    } 

    public void onLocationChanged(Location location) { 

     dumpLocation(location); 
    } 

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

    } 

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

    } 

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

    } 

    @Override 
    protected void onPause() { 

     super.onPause(); 
     mgr.removeUpdates(this); 
    } 

    @Override 
    protected void onResume() { 

     super.onResume(); 
     mgr.requestLocationUpdates(best, 15000, 10, this); 
    } 

    private void dumpLocation(Location l) { 

     if (l != null){ 

      myLocationLatitude = l.getLatitude(); 
      myLocationLongitude = l.getLongitude(); 
     } 
    } 
} 

Danke

+0

Wenn Sie android 4.2 verwenden Im Vergleich zu früheren Versionen von Android sind die Standortergebnisse möglicherweise weniger genau, wenn Ihre App die Berechtigung ACCESS_COARSE_LOCATION anfordert, die Berechtigung ACCESS_FINE_LOCATION jedoch nicht. Um die Datenschutzerwartungen von Benutzern zu erfüllen, wenn Ihre App eine Genehmigung für einen groben Standort (und nicht für einen guten Standort) anfordert, wird vom System keine Standortschätzung bereitgestellt, die genauer als ein Stadtblock ist. –

+0

Ich habe es auf '4.1.2' versucht. Aber ich bitte trotzdem um die Berechtigung ACCESS_COARSE_LOCATION und ACCESS_FINE_LOCATION. –

+0

Können Sie versuchen, die Zeit zwischen den Updates zu reduzieren? Werden die letztgenannten Standorte genauer als die ersten gesendet? –

Antwort

3

Sie sind nur die letzte bekannte Position zu bekommen. Sie sollten Standortaktualisierungen von LocationManager anfordern. Verwenden Sie LocationManager.getLocationUpdates.

Auf Ihrem LocationListener auf dem onLocationChanged(Location location) Methode können Sie auf der Location Objekt überprüfen, wie genau diese Lage ist, wie folgt aus:

float accuracy=location.getAccuracy(); 

dann, wenn diese Location für Sie genau genug ist, können Sie aufhören Empfangen von Standortaktualisierungen von der LocationManager unter Verwendung von removeUpdates() und Verwenden der empfangenen Location. Wenn der Location nicht genau genug ist, können Sie auf einen präziseren Location warten, und die Aktualisierungen letzt auf stoppen.

+0

Entschuldigung, das ist nur ein Teil des fraglichen Codes. Tatsächlich habe ich einen 'LocationListener', der ** Aktualisierungen anfordert ** und' onLocationChanged' implementiert. Welches ist 'mgr.requestLocationUpdates (LocationManager.NETWORK_PROVIDER, 15000, 10, das);' –

+0

als warum nicht vollständigen Code zur Verfügung stellen ...? –

+0

erledigt. Ich habe den vollständigen Code hinzugefügt –

Verwandte Themen