【问题标题】:Get last known location with Google Service API使用 Google Service API 获取最后一个已知位置
【发布时间】:2017-07-03 22:25:50
【问题描述】:

我正在学习使用 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;
                }
            }
        });

有人可以向我解释什么时候使用哪一个以及这两种方法之间有什么区别来获取最后一个已知位置?

【问题讨论】:

    标签: android android-location android-googleapiclient


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      Reduce friction with the new Location APIs

      在那 google 说不要使用 GoogleApiClient。

      在链接中有详细说明

      现在代码可以工作了,但由于以下几个原因它并不理想:

      • 很难重构为共享类,例如, 您想在多项活动中访问定位服务。
      • 应用程序在 onCreate 中乐观地连接,即使位置服务 直到稍后才需要(例如,在用户输入之后)。
      • 不处理应用连接谷歌失败的情况 播放服务。
      • 上手前有很多样板连接逻辑 带有位置更新。

      更好的开发者体验

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

      【讨论】:

      • 那么,第二个选项更好吗?
      • 根据博客是的,它的样板更少
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 2017-01-08
      • 2013-03-29
      • 1970-01-01
      相关资源
      最近更新 更多