我正在使用Google Maps v2,有时getLastKnownLocation()返回NULL。有没有其他选择具有相同的效果但具有更高的稳定性?感谢您的帮助
最佳答案
首先,如果用户已关闭应用程序的位置(棉花糖)或关闭了所有应用程序的位置(Lollipop及更低版本),则getLastKnownLocation()仅应返回null。另外,请确保在调用getLastKnownLocation之前先调用locationManager.requestSingleUpdate()。
这是一些相当可靠的代码,(如果我在5次尝试中都没有找到位置,我认为我们无法获得位置):
if (ContextCompat.checkSelfPermission(context,
Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& locMan != null) {
String provider;
provider = locMan.getProvider(LocationManager.NETWORK_PROVIDER).getName();
if (Looper.myLooper() == null) {
Looper.prepare();
}
int count = 5;
for (int i = 0; i < count; i++) {
locMan.requestSingleUpdate(provider, null, Looper.myLooper());
location = locMan.getLastKnownLocation(provider);
if (location != null) {
break;
} else {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
或者,您可以使用locationManager.requestLocationUpdates()申请位置更新,并为其提供LocationListener。操作系统获取位置更新时,将触发监听器。