2017-03-11 9 views
0

Ich hatte gerade einige Probleme mit der CameraUpdateFactory.Probleme beim Anzeigen eines Ortes und Zentrieren der Kamera

So eingebaut ich diesen Code in einem OnClickListener auf dem GpsButton auf einem Navigations Fragment:

if (ContextCompat.checkSelfPermission(mapFragment.getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION) == 
        PackageManager.PERMISSION_GRANTED) { 
       Log.d("Permission checked", "checkSelfPermission passed with no errors"); 
       map.setMyLocationEnabled(true); 
       Log.d("Permission checked", "Location Layer implementation successful"); 
      } else { 
       //Request the Permission 
       ActivityCompat.requestPermissions(mapFragment.getActivity(), new String[]{ 
         Manifest.permission.ACCESS_FINE_LOCATION}, 1); 
      } 

Diese im Grunde die Lage ermöglicht als blauer Punkt auf der Karte nur angezeigt werden, wenn die GPS-Taste gedrückt wird. Das war bisher perfekt funktional.

Ich enthielt auch eine Methode, um die Kamera auf den aktuellen Standort zu verschieben:

public void locateMe() { 

    LocationManager locationManager = (LocationManager) getActivity().getSystemService(LOCATION_SERVICE); // Getting LocationManager object from System Service LOCATION_SERVICE 
    Criteria criteria = new Criteria();// Creating a criteria object to retrieve provider 
    String provider = locationManager.getBestProvider(criteria, true);// Getting the name of the best provider 
    if (ContextCompat.checkSelfPermission(mapFragment.getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(mapFragment.getActivity(), new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 2); 
    } 
    Location location = locationManager.getLastKnownLocation(provider); 

    if (location != null) { 

     double latitude = location.getLatitude(); //Getting latitude of the current location 
     double longitude = location.getLongitude(); // Getting longitude of the current location 
     myPosition = new LatLng(latitude, longitude); // Creating a LatLng object for the current location 
     map.moveCamera(CameraUpdateFactory.newLatLngZoom(myPosition, CAMPUS_DEFAULT_ZOOM_LEVEL));//Camera Update method 
    } 
} 

Aus irgendeinem Grund ist dies ein Glücksspiel. Vor 3 Tagen war es auf einer Position, die nicht dort war, wo ich mich gerade befand, während es in den letzten 2 Tagen perfekt funktionierte. Kein Code wurde verändert. Könnte jemand bitte erklären, was vor sich geht? Irgendwelche Korrekturen oder Vorschläge würden geschätzt.

Antwort

1

Dies tritt auf, weil Sie GetLastKnownLocation verwenden.

Dies kann ohne Starten des Anbieters erfolgen. Beachten Sie, dass dieser Speicherort möglicherweise nicht mehr aktuell ist, z. B. wenn das Gerät ausgeschaltet und an einen anderen Speicherort verschoben wurde. Wenn der Anbieter derzeit deaktiviert ist, wird null zurückgegeben.

documentation

Sie haben requestLocation Updates verwenden, wenn Sie die Benutzer aktuelle Dokumentation abrufen möchten. requestLocationUpdates documentation

+0

ich sehen, aber eines der Probleme scheint zu sein, ist es richtig meine Position wird dann zeigt es meine Lage, dass ich wieder eine Stunde gewesen sein. Ist das normal? – BustyChicksFTW

+0

Es ist normal, dass der Standort manchmal korrekt ist und andere nicht. Wenn eine andere App vor kurzem keinen Standort angefordert hat, ist Ihr Standort wahrscheinlich veraltet und zu anderen Zeiten korrekt. Wenn Ihr Standort jedoch korrekt ist, sollte er normalerweise auch einige Minuten später korrekt sein. Sie sollten protokollieren, welcher Locationprovider verwendet wird, da Sie getBestLocationProvider verwenden, der bei jedem Aufruf dieser Methode möglicherweise einen anderen Locationprovider zurückgibt und eine höhere oder niedrigere Genauigkeit und damit einen anderen Speicherort aufweist. – Rockney

+0

Gibt es eine Möglichkeit, die googlemap.setmyLocationEnabled Kameraverriegelung programmatisch zu sperren? – BustyChicksFTW

Verwandte Themen