getLastKnownLocation的替代方案

时间:2016-09-08 13:24:37

标签: java android google-maps

我正在使用Google地图v2,有时getLastKnownLocation()会返回NULL。是否有其他方法可以产生相同的效果,但稳定性更高?谢谢你的帮助

1 个答案:

答案 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。当操作系统获得位置更新时,侦听器将触发。