1

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

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();

存储所有提供程序并逐个进行。但从未在任何地方看到此推荐。此外,文档建议是要求最好的提供者。

4

1 回答 1

7

getLastKnownLocation()仅在最近使用过该提供者时才返回该提供者的 Location 对象。如果不是最近,Android 会假定该提供者提供的最后一个位置已过时且错误,并返回 null。

在这种情况下,您必须等待 LocationListener 的onLocationChanged()方法被调用,然后才能获得可用的位置。

于 2013-03-14T13:08:45.263 回答