我正在学习使用Google Service API获取位置。但是自从我看到人们使用两种方式来获取位置以来,我感到困惑:
1.
FusedLocationProviderApi fusedLocationProviderApi = LocationServices.FusedLocationApi;
Location lastKnownLocation = fusedLocationProviderApi.getLastLocation(googleApiClient);
阿拉伯数字。
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;
}
}
});
有人可以向我解释何时使用哪一种以及这两种方法之间有什么区别来获取最后已知位置?
两种getLastLocation
方法都指向相同的文档内容。但是使用新的FusedLocationProviderClient
比FusedLocationProviderApi
更简单,因为我们不处理谷歌api客户端,它是回调方法。它会自动为我们处理播放服务连接。就这样
融合位置提供程序客户端方法返回任务(甚至获取最后已知位置(,恕我直言,这是由于在内部处理游戏服务的事情。
在Android博客中,谷歌发布了一个关于位置访问的主题。
使用新的位置 API 减少摩擦
在谷歌说不要使用GoogleApiClient。
在链接中,他们有详细的解释。
现在代码可以工作了,但由于以下几个原因,它并不理想:
例如- ,如果 您想在多个活动中访问定位服务。
- 该应用程序在创建中乐观地连接,即使定位服务 直到稍后(例如,在用户输入之后(才需要。
- 它不处理应用程序无法连接到谷歌的情况 播放服务。
- 在开始之前有很多样板连接逻辑 具有位置更新。
更好的开发人员体验
新的定位服务 API 要简单得多,并且会使您的代码不易出错。连接逻辑是自动处理的,你只需要附加一个完成侦听器: