4

经过大量的阅读和我自己的斗争,我不得不问我更好的同龄人。

我有一种无法解释的行为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()没有被调用,然后我得到一个假的可用性!在某些情况下,我不止一次接到了它的电话。

  2. 在使用 Android 6-8 的多个设备中观察到上述行为。搭载 Android 9 的 Pixel 3 会按预期提供位置信息。

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

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

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

从按下快速访问按钮打开定位服务时,自动解析弹出窗口有什么不同。检查设置时,快速访问按钮也会返回成功。还有另一种万无一失的请求方式requestLocationUpdates()吗?

提前致谢。

4

0 回答 0