2017-03-11 1 views
0

Je viens d'avoir des problèmes pour des raisons inconnues avec CameraUpdateFactory.Problèmes d'affichage d'un emplacement et centrage de l'appareil photo

ai donc incorporé ce code dans un onclickListener sur le GpsButton sur un fragment de navigation:

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

Cela permet essentiellement l'emplacement à afficher comme un point bleu sur la carte uniquement lorsque le bouton GPS enfoncé. Cela a été parfaitement fonctionnel jusqu'à présent.

J'ai aussi incorporé une méthode pour déplacer la caméra à mon emplacement actuel:

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 
    } 
} 

Pour une raison quelconque, cela est frappé ou manquer. Il y a 3 jours, il était verrouillé sur une position qui n'était pas où je me trouvais actuellement alors que pour les 2 derniers jours cela a fonctionné parfaitement. Aucun code n'a été modifié. Quelqu'un pourrait-il expliquer ce qui se passe? Toutes les corrections ou suggestions seraient appréciées.

Répondre

1

Cela se produit car vous utilisez getLastKnownLocation.

Cela peut être fait sans démarrer le fournisseur. Notez que cet emplacement peut être obsolète, par exemple si l'appareil a été éteint et déplacé vers un autre emplacement. Si le fournisseur est actuellement désactivé, null est renvoyé.

documentation

Vous devez utiliser les mises à jour de requestLocation si vous souhaitez récupérer la documentation actuelle de l'utilisateur. requestLocationUpdates documentation

+0

Je vois, mais l'un des problèmes semble être que, il obtient ma position correctement, puis il montre mon emplacement que je suis une heure en arrière. Est-ce normal? – BustyChicksFTW

+0

Il est normal que l'emplacement soit parfois correct et d'autres fois non. Si une autre application n'a pas demandé d'emplacement récemment, votre position sera probablement obsolète et d'autres fois, elle sera correcte. Si toutefois votre emplacement est correct, il devrait normalement être correct aussi bien quelques minutes plus tard. Vous devez vous connecter à quel emplacement LocationProvider est utilisé, car vous utilisez getBestLocationProvider, qui peut renvoyer un fournisseur d'emplacement différent chaque fois que vous appelez cette méthode, et qui peut avoir une précision plus élevée ou plus faible et, par conséquent, un emplacement différent. – Rockney

+0

Existe-t-il un moyen de verrouiller la caméra sur googlemap.setmyLocationEnabled? – BustyChicksFTW