我使用条件对象来获得最好的提供者,如下所示
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.ACCURACY_COARSE时,它将使用“网络”提供程序。
我如何让它首先尝试全球定位系统(因为它是启用的)和因为我们是室内的,它将无法连接到一个卫星,然后回落到使用“网络”。我很难做到这一点。我再说一遍,GPS是启用的,但不能访问卫星,所以希望它能得到网络定位。
谢谢。
发布于 2013-01-21 07:10:35
解决方案是创建位置管理器并附加2个侦听器以接收更新。一个用于全球定位系统,另一个用于网络。您将其设置为相当快地接收更新(或者根据您自己的情况,我只需要获得位置),然后创建一个方法,比较GPS和Network的位置,并找出哪个更准确。你最多做3次,以获得平均哪一个是返回最准确的位置,然后你停止位置更新。
https://stackoverflow.com/questions/13891190
复制相似问题