我正在使用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。操作系统获取位置更新时,将触发监听器。

10-07 17:09