【问题标题】:Android Fall back to ACCURACY_COARSE if GPS in not available如果 GPS 不可用,Android 回退到 ACCURACY_COARSE
【发布时间】:2013-01-21 15:10:35
【问题描述】:

我正在使用 Criteria 对象来获得像这样的最佳提供者

final boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if(isGpsEnabled) {
      Criteria crit = new Criteria();
      crit.setAccuracy(Criteria.ACCURACY_FINE);
      crit.setCostAllowed(true);
      crit.setPowerRequirement(Criteria.NO_REQUIREMENT);
      crit.setSpeedRequirement(false);
      String provider = locationManager.getBestProvider(criteria, true);
      locationManager.requestLocationUpdates(provider, 600000, 0, new myLocationListener());
}

在我的手机 (Android 4.1) 上,我同时启用了“使用 GPS 卫星”和“使用无线网络”选项。现在,当我在户外时,上面的代码效果很好,它给了我 GPS 位置。

但是,当我在室内时,它不会恢复到“网络”提供商。它只是不断尝试通过 GPS 获取位置,但从未得到它(我等了 1 分钟左右)

当我将 Criteria 的代码更改为使用 Criteria.ACCURACY_COARSE 时,它使用“网络”提供程序。

我如何让它首先尝试 GPS(因为它已启用),并且因为我们在室内,所以它无法连接到卫星然后回退到使用“网络”。我不能轻易地让它工作。 我再次声明,GPS 已启用,但无法访问卫星,因此希望它获取网络位置。

谢谢。

【问题讨论】:

    标签: android geolocation gps


    【解决方案1】:

    解决方案是创建位置管理器并附加 2 个侦听器以接收更新。一个用于 GPS,另一个用于 NETWORK。您将其设置为相当快地接收更新(或者根据您自己的情况,我只需要获取位置)然后创建一个方法来比较 GPS 和网络的位置并找出哪个更准确。您最多执行 3 次,以平均获得最准确的位置,然后停止位置更新。

    【讨论】: