Android-FusedLocationClient,requestLocationUpdates()不返回结果和可用性异常行为

时间:2019-01-30 10:02:49

标签: java android location fusedlocationproviderclient

经过大量阅读并亲自与之抗争,我不得不问我的同龄人。

我的行为无法用FusedLocationClient来解释。

我想获取位置(仅一个实例)以向用户显示一些信息。为此,我打电话给: mFusedLocationClient.getLastLocation().addOnSuccessListener(...)

如果getLastLocation()的位置为空。我想“开始启动”客户端以获取一个位置。

LocationRequest locationRequest = new LocationRequest();
locationRequest.setFastestInterval(5000);
locationRequest.setInterval(10000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

mLocationCallback = new LocationCallback() {
   @Override
   public void onLocationResult(LocationResult locationResult) {
       Timber.d("OnLocationResult entered");
       if (locationResult != null && !locationResult.getLocations().isEmpty())
           findCurrentArea();
   }

   @Override
   public void onLocationAvailability(LocationAvailability locationAvailability) {
      Timber.d("OnLocationAvailability entered");
      super.onLocationAvailability(locationAvailability);
   }
};
mFusedLocationClient.requestLocationUpdates(locationRequest, mLocationCallback, null);

让我事先说一下,我也使用过LocationSettingsRequest来检查设置,并且我总是成功的。

奇怪的部分:

  1. onLocationAvailability()被调用了两次。第一次响应是正确的,但是没有调用onLocationResult(),然后我得到的是false!我有几次不止一次地叫它。

  2. 在使用Android 6-8的多个设备中观察到以上行为。配备Android 9的Pixel 3可以提供预期的位置。

  3. 在这种情况下,如果我在有问题的设备上启动Google Maps,则地图也无法显示位置。如果然后关闭位置,则会显示带有“?”的地图位置按钮。在里面。按下地图上的按钮,我会弹出一个窗口,我应该打开位置。好的,这也可以恢复我应用程序中的位置服务!

  4. 如果我使用LocationSettingsRequest失败案例并进行自动解析(与Google Maps相同的弹出窗口),则位置会正确触发!!!

所以问题基本上是...为什么?

通过按快速访问按钮打开定位服务时,自动解析弹出窗口有何不同之处。检查设置时,快速访问按钮也会返回成功。还有另一种可以保证请求requestLocationUpdates()的方式吗?

谢谢。

0 个答案:

没有答案