Android:GPS从精细到粗略的回退

时间:2010-12-29 13:37:28

标签: android gps

问候,

当我没有修复时,有没有人知道如何获得粗略的GPS坐标,并在我修复时获得精确的GPS坐标?

我尝试使用谷歌搜索一些示例代码无济于事。

我确实找到了这个:http://www.android10.org/index.php/articleslocationmaps/226-android-location-providers-gps-network-passive

但我不知道如何实现回退到粗略/升级到精细。

我希望有人可以提供帮助。提前谢谢,

2 个答案:

答案 0 :(得分:3)

您可以在documentation中找到对该主题的精彩介绍。基本思想是您启用侦听来自不同提供商的更新。收到新位置后,将其与之前存储的位置进行比较(上述链接中提供了一个示例函数)。

位置对象有一个getAccuracy,可用于衡量其准确性。您还应该设置一个计时器,以便了解位置提供程序提供更新后经过的时间。如果GPS提供商给您更新后超过两分钟,则开始侦听网络更新。在收听网络更新时,如果GPS为您提供了新的更新,请切换到正确的位置。

答案 1 :(得分:2)

您可以使用以下代码获取最后知道的位置。它获取位置提供程序并向后循环数组。即从GPS开始,如果没有GPS则获得网络位置。您可以在需要获取位置时调用此方法。

private double[] getGPS() {
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  
List<String> providers = lm.getProviders(true);

/* Loop over the array backwards, and if you get an accurate location, then break         out the loop*/
Location l = null;

for (int i=providers.size()-1; i>=0; i--) {
    l = lm.getLastKnownLocation(providers.get(i));
    if (l != null) break;
}

double[] gps = new double[2];
if (l != null) {
    gps[0] = l.getLatitude();
    gps[1] = l.getLongitude();
}
return gps;
}