即使使用最佳提供程序,getLastKnownLocation()也会返回null

时间:2013-03-14 12:49:04

标签: android location locationmanager

这是我用来获取当前位置的代码:

mgr = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
best = mgr.getBestProvider(criteria, true);
if (best == null) {
    //ask user to enable atleast one of the Location Providers
} else {
    Location location = mgr.getLastKnownLocation(best);
//But sometimes it returns null
}

几乎每次best = network

但它有时并没有提供位置

mgr.getLastKnownLocation(best) returns null

同时

onResume() {
    mgr.requestLocationUpdates(best, 15000, 10, this);
}

onPause() {
    mgr.removeUpdates(this);
}

此类案件是否有替代案件?

一个选项可能是

List<String> providers = mgr.getAllProviders();

存储所有提供商并逐步减少1.但从未在任何地方看到过此推荐。此外,要求最好的提供者是文档的建议。

1 个答案:

答案 0 :(得分:7)

如果最近使用过该提供程序,则

getLastKnownLocation()仅返回提供程序的Location对象。如果它最近没有,那么Android假定该提供者给出的最后一个位置是过时和错误的,并返回null。

在这种情况下,您必须等待LocationListener的onLocationChanged()方法在有可用位置之前被调用。