locationManager.getLastKnownLocation()返回null

时间:2014-05-28 08:51:42

标签: android geolocation location latitude-longitude

我不明白为什么locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);将位置返回null。我给了所有许可,但是它的谴责null

          if (isGPSEnabled) {
            if (location == null) {
                locationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("GPS", "GPS Enabled");
                if (locationManager != null) {
                    location = locationManager
                            .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                    if (location != null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
            }
        }

5 个答案:

答案 0 :(得分:14)

我有同样的问题。这是因为我的设备没有存储最后一个已知位置。我只是转到Google地图并使用GPS精确定位我的位置,然后为getLastKnownLocation()返回了一个值

答案 1 :(得分:11)

您可以请求此类位置更新

mLocationManager.requestLocationUpdates(myProvider, 0, 0, locationChangeListener);

然后在locationChangeListener.onLocationChanged的第一个回调中设置你的坐标。只是不要忘记致电mLocationManager.removeUpdates(locationChangeListener)

答案 2 :(得分:3)

如果设备不知道最后的已知位置,则返回documentation,它返回null。可能GPS无法找到你。无论如何,它需要大约一分钟或更长时间。因此,在晴朗的天空下,远离高层建筑,尝试外出,等到GPS可以找到你。

答案 3 :(得分:3)

我使用此方法获取位置我认为它会帮助你

private void startReceivingLocationUpdates() {

    if (mLocationManager == null) {

        mLocationManager = (android.location.LocationManager)
                mContext.getSystemService(Context.LOCATION_SERVICE);

    }

    if (mLocationManager != null) {

        try {

            mLocationManager.requestLocationUpdates(

                    android.location.LocationManager.NETWORK_PROVIDER,
                    1000,
                    0F,
                    mLocationListeners[1]);

        } 
     catch (SecurityException ex) 
         {
            Log.i(TAG, "fail to request location update, ignore", ex);

        } 

       catch (IllegalArgumentException ex)
       {
            Log.d(TAG, "provider does not exist " + ex.getMessage());
        }

        try {

            mLocationManager.requestLocationUpdates(

                    android.location.LocationManager.GPS_PROVIDER,
                    1000,
                    0F,
                    mLocationListeners[0]);

            if (mListener != null) mListener.showGpsOnScreenIndicator(false);


        }
       catch (SecurityException ex) {

            Log.i(TAG, "fail to request location update, ignore", ex); } 

        catch (IllegalArgumentException ex) {

            Log.d(TAG, "provider does not exist " + ex.getMessage());  }

        Log.d(TAG, "startReceivingLocationUpdates");
    }
}

答案 4 :(得分:1)

当您使用GPS作为提供者时,它会为您的结果提供1到2个mnts,因此您必须在获取位置时进行有争议的检查,并且网络提供商会在您请求时立即为您提供位置。因此,您不会立即在GPS提供商处获得位置lat lon。

GPS仅在第一次使用1到2之后才会给出您正在通话的位置......