使用Google Service API获取上次已知位置

时间:2017-07-03 22:25:50

标签: android android-location android-googleapiclient

我正在学习使用Google Service API获取位置信息。但我感到困惑,因为我看到人们使用两种方式来获取位置:

1

FusedLocationProviderApi fusedLocationProviderApi = LocationServices.FusedLocationApi;
Location lastKnownLocation = fusedLocationProviderApi.getLastLocation(googleApiClient);

2

FusedLocationProviderClient mFusedLocationClient =  LocationServices.getFusedLocationProviderClient(this);
...
Task<Location> locationTask = mFusedLocationClient.getLastLocation();
        locationTask.addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location
                if (location != null) {
                    mLastKnownLocation = location;
                }
            }
        });

有人可以向我解释何时使用哪一个&amp;获得最后已知位置的这两种方法之间有什么区别?

2 个答案:

答案 0 :(得分:1)

两种getLastLocation方法都指向了我们相同的文档内容。但使用新的FusedLocationProviderClientFusedLocationProviderApi更简单,因为我们不会处理谷歌API客户端及其回调方法。它自动为我们处理播放服务连接。就这样

FusedLocationProviderClient方法返回Task(甚至获取最后一个已知位置),恕我直言这是由于在内部处理播放服务的事情。

答案 1 :(得分:0)

在Android博客中,谷歌发布了一个关于位置访问的主题。

Reduce friction with the new Location APIs

谷歌表示不要使用GoogleApiClient。

在链接中,他们有详细说明

现在代码有效,但由于以下几个原因,它并不理想:

  • 例如,如果重构为共享类很难 您希望在多个活动中访问位置服务。
  • 即使位置服务,应用也会在onCreate中乐观地连接 直到稍后才需要(例如,在用户输入之后)。
  • 它无法处理应用无法连接到Google的情况 播放服务。
  • 入门前有很多样板连接逻辑 位置更新。

更好的开发者体验

新的LocationServices API更简单,并且会使您的代码更不容易出错。连接逻辑自动处理,您只需附加一个完成侦听器: