【问题标题】:onLocationChanged being called even when map is just moved即使刚刚移动地图,也会调用 onLocationChanged
【发布时间】:2020-02-07 14:58:40
【问题描述】:
locationListener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    centerOnMapLocation(location,"Your location");
                }

只有当我在模拟器中从extented controls设置位置时,即当用户的位置发生变化时,才应调用此方法onLocationChanged

 public void centerOnMapLocation(Location location, String title){
        if(location!=null) {
            LatLng userLocation = new LatLng(location.getLatitude(), location.getLongitude());
            mMap.clear();
            mMap.addMarker(new MarkerOptions().position(userLocation).title(title));
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 12));
        }
    }

centerOnMapLocation 将相机移动到用户的位置。当我在模拟器中从extented controls 中单击设置位置 时,相机和标记将移动到新位置。没关系。但在那之后,当我尝试在地图内移动时,一旦我停止触摸屏幕,相机就会再次移回标记处。

基本上,当我在地图屏幕内滑动以在地图内移动时,只要我的滑动停止(意味着我停止触摸屏幕),相机就会再次移动到标记处。我希望标记保留在那里,并且我应该能够在地图内正常移动

为什么相机应该只在位置变化而不是地图屏幕变化时移动

【问题讨论】:

  • 我想你可能没有意识到,在调用removeUpdates() 之前,onLocationChanged() 通常会每秒继续执行一次,即使你的位置实际上并没有“改变”。
  • 感谢您的回复。我得到了一个潜在的修复,我已经给出了答案。我尝试使用removeUpdates(),但我无法将它正确插入到我的代码中,因为它一被调用就停止更新,但我稍后需要再次更新。请查看我的答案是否看起来不错,如果是,请投票,以便我了解您对它的认可,或者如果您有更好的解决方案,请给予。

标签: android android-maps-v2 android-maps


【解决方案1】:

以下行为 locationLister 提供位置更新。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);

请求位置更新时的第三个参数是minimum distance 移动直到位置更新。上述情况当0被传递时,会不断更新位置,locationLister将其作为新位置,cameraZoom会被更新。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,1,locationListener);

要解决此问题,只需将minimum distance 的值更改为任意值,此处为1。现在在更改位置之前,它不会调用centerOnMapLocation

【讨论】:

  • 是的,这是一个很好的解决方案,如果它适合您,那么这就是您所需要的。但是,您应该注意一些潜在的边缘情况:位置/GPS 的准确性有限,并且有噪音。检测到的位置有时会移动许多 即使您没有实际移动。一些设备将能够成功过滤掉大部分噪音;其他人不会。您选择的最小距离为 1 ,这并不是特别大,因此如果用户在拖动地图时走一两步,您可能会发现他们的位置已被重置。
  • 是的,我知道这一点。在发布时,这些参数将相应更改。这个案例是在测试时。我将 minTime 和 minDistance 保持为 0。问题是,在模拟器上进行测试时,设备甚至没有移动一点,并且更早它允许在地图内移动。但是现在似乎经过一些更新,即使位置没有改变,如果minDistance为0,它也会连续调用该函数。
猜你喜欢
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多