何时使用LocationManager / LocationListenerVS。 LocationServices / LocationCallback跟踪用户位置?

时间:2018-12-24 20:23:27

标签: java android google-maps geolocation

我已通过以下方式实施了用户地理位置跟踪:

#1

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            mMap.clear();
            repaintUserLocationPin(location);
        }

#2

locationProviderClient = LocationServices.getFusedLocationProviderClient(this);

locationRequest = new LocationRequest();
locationRequest.setInterval(3000);
locationRequest.setFastestInterval(3000);
locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

LocationCallback locationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        List<Location> locationList = locationResult.getLocations();
        if (locationList.size() > 0) {
            //The last location in the list is the newest
            Location location = locationList.get(locationList.size() - 1);

            mLastLocation = location;
            if (mCurrLocationMarker != null) {
                mCurrLocationMarker.remove();
            }

            repaintUserLocationPin(mLastLocation);
        }
    }
};

总结恕我直言:

  • 这两个似乎都达到了相同的目的,跟踪并更新了当前用户的位置。
  • 最后,它们既冗长又复杂。
  • #2需要新的“实现”库,但这不是很多开销

另一方面,有一个第3 解决方案,但这不允许我获取更新的当前位置,除非,我单击 Geolocate按钮。我在说:

    map.setOnMyLocationButtonClickListener(new GeolocateBtnClickListener(MapsActivity.this));
    map.setOnMyLocationClickListener(new GeolocateClickListener(MapsActivity.this));

这具有BIG的一个大优点,即标记是自动创建的,并且对用户的移动响应更快。例如,它指向用户所指向的目录。

那么,为什么要在另一种上使用?或者在什么情况下建议在另一种上使用呢?

1 个答案:

答案 0 :(得分:1)

以下仅是我的意见

  

这两个似乎都达到了相同的效果,跟踪并更新了当前   用户的位置。

可以通过它们的位置获取方式来实现差异。 LocationManager使我们有机会选择位置来源。因此,我们可以从gps,网络和被动替代方案中选择任何来源。但是LocationServices并没有给这个机会,而是给人一种品位,质量和电池使用之间的动力。

  

最后,它们既冗长又相同   复杂性。

配置它们似乎有点相同,但是LocationServices可能是首选。确定质量/能力似乎比与供应商打交道更为合理。

  

#2需要新的“实现”库,但这不是很多开销

LocationManager从版本1开始可用,而LocationServices在设备支持播放服务的情况下可用。