是否有标准及时获得最新修复(而不是最准确)

时间:2013-01-28 09:56:01

标签: android gps locationmanager

这是我用来获取最后一个已知位置而不添加监听器的代码。我不想耗尽电池,所以我用过:

public static Location getLastLoc(Context context){

    Location loc = null;

    LocationManager locationManager = (LocationManager) context
            .getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String best = locationManager.getBestProvider(criteria, true);
    //Log.i("***", best);
    if (best != null) {
        loc = locationManager.getLastKnownLocation(best);
    }
    //Sometimes getLastKnownLocation return null (new device), so I use network as default when possible. 
    if (loc == null) {
        try {
            loc = locationManager
                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return loc;
}

我目前正在尝试此代码,最好的提供商听起来像是GPS。

不幸的是,今天早上我从A市搬到了B市,我还没有GPS定位。 (但GPS已开启)

所以当我在B城时,我仍然可以到达旧城区,而网络位置知道城市B(使用Google地图测试)

因此,由于我不需要准确的位置,如何及时获得最新修复(GPS为3小时,网络为10分钟)

由于

2 个答案:

答案 0 :(得分:0)

你必须利用听众才能获得最后知道的位置。因为

          locationManager.getLastKnownLocation(best);

它不会调用GPS来获取更新位置此方法仅将最后已知位置提供给locationManager对象。这就是为什么您的位置没有更新。

答案 1 :(得分:0)

在等待更好的答案时,我唯一能做的就是检查最新的已知位置是否不超过一小时:

loc = locationManager.getLastKnownLocation(best);
if ((System.currentTimeMillis() - loc.getTime()) < DateUtils.HOUR_IN_MILLIS)
    return loc;

try {
    if (locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER) != null)
        loc = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    } catch (Exception e) {
        e.printStackTrace();
    }