显示位置并使相机居中的问题

时间:2017-03-11 23:21:08

标签: java android google-maps geolocation locationmanager

我在CameraUpdateFactory中出现了一些奇怪的原因。

因此,我将此代码合并到导航片段上GpsButton上的onclickListener中:

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

这基本上使得仅当按下GPS按钮时才能在地图上将位置显示为蓝点。到目前为止,这已经非常实用。

我还采用了一种将相机移动到当前位置的方法:

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

由于某种原因,这是命中或错过。 3天前,它锁定的位置不是我目前所在的位置,而在过去的2天里,它完美运行。没有任何代码被更改。有人可以解释一下发生了什么吗?任何修复或建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是因为您使用的是getLastKnownLocation。

  

这可以在不启动提供程序的情况下完成。请注意,此位置可能已过期,例如,如果设备已关闭并移至其他位置。   如果当前禁用了提供程序,则返回null。

documentation

如果要检索用户的当前文档,则必须使用requestLocation更新。 requestLocationUpdates documentation