0

我正在使用 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 已启用,但无法访问卫星,因此希望它获取网络位置。

谢谢。

4

1 回答 1

1

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

于 2013-01-21T07:10:35.457 回答