这是我用来获取最后一个已知位置而不添加监听器的代码。我不想耗尽电池,所以我用过:
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分钟)
由于
答案 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();
}