getLastKnownLocation返回null

Ale*_*ite 69 android location google-maps

我已经读过一些关于此的问题,但我找不到我需要的答案.

所以,情况是我设置了我的地图,我想获取当前的gps位置.我已经检查过我的变量不是NULL但是我的结果来自:

getLastKnownLocation(provider, false);
Run Code Online (Sandbox Code Playgroud)

虽然给了我null,所以这是我需要帮助的地方.我已经为COARSE + FINE位置添加了权限.但我通常会为手机禁用各种网络数据,因为我对手机账单中不可预测的数据流费用感到不满.所以我只启用了WiFi并连接了此测试.

还有什么我需要启用才能实现这一目标吗?我认为WiFi应该足够了吗?

Tha*_*ana 174

使用此方法获取最后的已知位置:

LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();

private Location getLastKnownLocation() {
    mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
    List<String> providers = mLocationManager.getProviders(true);
    Location bestLocation = null;
    for (String provider : providers) {
        Location l = mLocationManager.getLastKnownLocation(provider);
        if (l == null) {
            continue;
        }
        if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
            // Found best last known location: %s", l);
            bestLocation = l;
        }
    }
    return bestLocation;
}
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用你的代码获得nullPointer (23认同)
  • 问题是关于`getLastKnownLocation返回null` ...此代码将不会改变任何内容...如果对于所有提供者`mLocationManager.getLastKnownLocation`**(因为它可以返回null)**它仍将返回null ...**回答是...对不起你无法避免这个...如果你真的想要的位置不使用getLastKnownLocation** (8认同)
  • 原来我一直都是正确的,我只是注意到一个错误,我找到了解决方案。我没有将手机设置为允许使用 Google 定位进行 GPS。是的。无论如何谢谢=) (2认同)
  • 奇迹般有效.谢谢! (2认同)

Bin*_*mar 25

当你不应该将新的和旧的位置API混合在一起时.

要获得最后一个已知位置,您需要做的就是打电话

compile "com.google.android.gms:play-services-location:11.0.1"
mLocationClient.getLastLocation();
Run Code Online (Sandbox Code Playgroud)

一旦定位服务连接.

阅读如何使用新的位置API

http://developer.android.com/training/location/retrieve-current.html#GetLocation

 private void getLastLocationNewMethod(){
    FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
    mFusedLocationClient.getLastLocation()
            .addOnSuccessListener(new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    // GPS location can be null if GPS is switched off
                    if (location != null) {
                        getAddress(location);
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.d("MapDemoActivity", "Error trying to get last GPS location");
                    e.printStackTrace();
                }
            });
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您指出有新的API.这应该是公认的答案. (3认同)
  • 位置也在这里返回 null。原因是什么? (2认同)

Sag*_*yad 5

您正尝试从网络提供商处获取缓存位置.您需要等待几分钟才能获得有效的修复.由于网络提供程序的缓存为空,因此您显然在此处获得空值.

  • 即使没有任何存储,我是否需要随身携带? (3认同)
  • 您必须使用位置侦听器的 onLocationChanged 方法。获得有效的修复需要时间(几分钟) (2认同)