0

这是我用来在不添加侦听器的情况下获取最后一个已知位置的代码。我不想耗尽电池,所以我使用了:

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市时仍然得到旧城A,并且网络位置知道B市(用谷歌地图测试)

所以,由于我不需要准确的位置,怎么可能及时获得最新的修复(GPS 3 小时前,网络 10 分钟前)

谢谢

4

2 回答 2

0

您必须使用侦听器来获取最后知道的位置。因为

          locationManager.getLastKnownLocation(best);

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

于 2013-01-28T10:05:49.477 回答
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();
    }
于 2013-01-28T11:43:51.350 回答