安卓:快速获取GPS位置

5

我需要在我的应用程序中找到一个GPS位置,精度不需要很高(只需约1公里的精度),但我需要非常快速! (1-5秒)

我注册了这个监听器:

mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener);

但是找到解决方法太耗费时间了!有没有人知道一种可以更快地找到位置的方法(我基本上只需要设备所在的当前城镇)。

谢谢!
2个回答

10

如果你不需要非常精细的位置信息且需要快速获取,那么你应该使用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开发者博客有一篇很好的文章在这里讲述了如何完成此操作。这个来自博客的代码片段遍历所有位置提供程序以获取最后已知位置。这似乎是你需要的。

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;
    }
  }
}

“ACCURACY_FINE”听起来似乎与所需相反。 - Ben Voigt
我的错。更改为ACCURACY_COARSE。 - ACC

6

你可以使用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);
    }

想了解更多信息,请参考链接

接着使用提供者来获取您的位置。

希望这能帮到您...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接