我正在使用Google地图v2,有时getLastKnownLocation()会返回NULL。是否有其他方法可以产生相同的效果,但稳定性更高?谢谢你的帮助
答案 0 :(得分:1)
首先,如果用户关闭了应用程序的位置(Marshmallow)或关闭了所有应用程序的位置(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。当操作系统获得位置更新时,侦听器将触发。