我需要在我的应用程序中找到一个GPS位置不需要准确(仅约1km的准确度)但我需要它非常快速! (1S-5)
我注册了这个监听器:
mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener);
但是找到修复需要很长时间!有没有人知道一种方法,我可以更快地找到位置(我基本上只需要设备所在的当前城镇)。 谢谢!
答案 0 :(得分:7)
由于您不需要非常细粒度的位置而且需要快速,因此您应该使用getLastKnownLocation
。像这样:
LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_COARSE);
String provider = lm.getBestProvider(crit, true);
Location loc = lm.getLastKnownLocation(provider);
编辑: Android dev博客有一个很好的帖子here来做这件事。来自博客的此片段会迭代所有位置提供程序以获取最后的已知位置。这似乎是你需要的
List<String> matchingProviders = locationManager.getAllProviders();
for (String provider: matchingProviders) {
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
float accuracy = location.getAccuracy();
long time = location.getTime();
if ((time > minTime && accuracy < bestAccuracy)) {
bestResult = location;
bestAccuracy = accuracy;
bestTime = time;
}
else if (time < minTime &&
bestAccuracy == Float.MAX_VALUE && time > bestTime){
bestResult = location;
bestTime = time;
}
}
}
答案 1 :(得分:5)
为此,您可以使用Criteria定义您的标准。
public void setCriteria() {
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
provider = locationManager.getBestProvider(criteria, true);
}
有关详细信息,请参阅此link。
然后使用提供程序获取您的位置。
希望这会有所帮助......