我正在使用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时,它会使用“network”提供程序。
如何让它首先尝试GPS(因为它已启用),因为我们在室内它将无法连接到卫星然后再回到使用“网络”。我不能轻易搞定。 我再次声明,GPS已启用但无法访问卫星,因此希望它获取网络位置。
感谢。
答案 0 :(得分:1)
解决方案是创建位置管理器并附加2个侦听器以接收更新。一个用于GPS,另一个用于NETWORK。您将其设置为相当快速地接收更新(或者根据您自己的情况,我只需要获取位置)然后您创建一个方法来比较GPS和网络的位置,并找出哪个更准确。你这样做最多3次,以平均哪一个返回最准确的位置,然后你停止位置更新。