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

Posted

技术标签:

【中文标题】何时使用 LocationManager/LocationListener VS。 LocationServices/LocationCallback 跟踪用户位置?【英文标题】:When to use LocationManager/LocationListener VS. LocationServices/LocationCallback to track user location? 【发布时间】:2019-05-23 20:27:15 【问题描述】:

我已经使用以下实现了用户地理位置跟踪:

#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 需要新的“实现”库,但这并不是很大的开销

另一方面,有一个第三种解决方案,但这不允许我获取更新的当前位置除非,我点击地理定位地图中的按钮。我说的是:

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

这有一个很大的优势,那就是标记是自动创建的,并且对用户的动作反应更快。例如,它指向用户指向的方向。

那么,为什么要使用一个而不是另一个,或者在什么情况下您会建议使用一个而不是另一个?

【问题讨论】:

【参考方案1】:

以下仅代表个人观点

这些似乎都实现了相同的,跟踪和更新当前 用户的位置。

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

归根结底,它们都同样冗长且具有相同的 复杂性。

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

#2 需要新的“实现”库,但这并没有太大的开销

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

【讨论】:

以上是关于何时使用 LocationManager/LocationListener VS。 LocationServices/LocationCallback 跟踪用户位置?的主要内容,如果未能解决你的问题,请参考以下文章

何时使用,何时不使用 Try Catch Final

何时使用 Storyboard 以及何时使用 XIB

何时使用 GetXXX() 方法以及何时使用 Getter 属性

Vuex - 何时使用 getter 以及何时使用状态

何时使用 .First 以及何时将 .FirstOrDefault 与 LINQ 一起使用?

何时使用 OSGi EventAdmin,何时不使用?