我注意到可以通过(至少)两种不同的方式请求位置更新。
-
使用
GoogleAPIClient
:// Callback for when the GoogleAPIClient is connected @Override public void onConnected(Bundle connectionHint) { LocationServices.FusedLocationApi.requestLocationUpdates( mGoogleApiClient, mLocationRequest, this); }
-
使用
LocationManager
:LocationManager locationManager = (LocationManager) getActivity(). getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
谷歌似乎在其教程"接收位置更新"中推广了方法1
。我不清楚方法 1
的好处是什么,因为方法 2
对我来说同样有效(我在应用程序中的两个不同位置使用这两种方法)。
好消息,从Google Play服务版本11.0开始,无需连接GoogleApiClient
https://android-developers.googleblog.com/2017/06/reduce-friction-with-new-location-apis.html
您不必处理回调和状态(已连接,正在连接),只需请求/删除位置更新,类似于LocationManager的味道。
获取位置更新的新方法是在 android 中使用融合位置提供程序。关于融合位置提供程序API的最好的事情是,您无需担心位置更新,它始终为您提供最新且准确的位置,并在间隔或位置更改后更新位置。关于融合位置提供商API的另一件事是,您无需考虑最佳位置提供商,因为它会自动选择最适合您的Android设备硬件的最佳位置提供商。
以下是 I/O 2013 中的 YouTube 视频,其中可能会提供更多详细信息。