2016-04-13 7 views
0

Ich habe wahrscheinlich einfache Frage, aber ich kann nicht herausfinden, was falsch ist.GoogleMaps API v2 setMyLocationEnabled unterscheidet sich von LocationManager

Wenn ich meinen Standort mit Knopf auf der Karte einstelle, ist der Standort fast 100 genau.

Wenn ich Location Manager verwende, um meinen Standort zu bekommen, bekomme ich ungefähr 10-20 Meter falschen Standort. Hier

ist der Code:

@Override 
public void onMapReady(final GoogleMap googleMap) { 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     return; 
    } 
    mGoogleMap = googleMap; 
    mGoogleMap.setMyLocationEnabled(true); 


    Button setLoc = (Button) findViewById(R.id.setLoc); 

    assert setLoc != null; 
    setLoc.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       return; 
      } 
      mGoogleMap.clear(); 
      LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
      Criteria criteria = new Criteria(); 
      Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false)); 

      latLng = new LatLng(location.getLatitude(), location.getLongitude()); 

      Toast.makeText(MainActivity.this, String.valueOf(latLng), Toast.LENGTH_LONG).show(); 
      //zoom to current position: 
      mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
      mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(17)); 
      mGoogleMap.addMarker(new MarkerOptions().position(latLng).title("Your location").anchor(0.0f, 1.0f)); 

     } 
    }); 

} 

Was mache ich falsch? Der blaue Punkt befindet sich nicht an der gleichen Stelle wie mein Marker, und der blaue Punkt hat eine bessere Präzision, wie ich oben sagte. Danke!

klein UPDATE , wenn ich den Code auf Emulator laufe, ist es fast die gleiche Stelle ist ... hmm, auf reales Gerät ist es anders. Was könnte das Problem sein?

Antwort

1

Ich denke, dass es möglicherweise Gerät abhängig. Sie müssen die Priorität auf PRIORITY_HIGH_ACCURACY ändern. Bevor Sie Standortaktualisierungen anfordern, muss Ihre App eine Verbindung mit den Standortdiensten herstellen und eine Standortanfrage stellen. Sobald eine Standortanforderung vorhanden ist, können Sie die regelmäßigen Updates starten, indem Sie requestLocationUpdates() aufrufen, und zwar in dem vom Google API-Client bereitgestellten Rückruf , der aufgerufen wird, wenn der Client bereit ist.

Speicherort mit dem LocationListener-Callback aktualisieren. Rufen Sie requestLocationUpdates() an und übergeben Sie Ihre Instanz des GoogleApiClient, das LocationRequest-Objekt und einen LocationListener. Definieren Sie eine startLocationUpdates()-Methode, die aus dem onConnected()-Rückruf aufgerufen wird.

+0

Es funktionierte, ich musste nur den ** Fused Location Provider ** verwenden, der gleiche wie der blaue Punkt. Jetzt ist mein Standort immer gleich. Antwort angenommen. – Wladislaw

+0

Danke. Mehr Macht! –

Verwandte Themen