LocationManager.getLastKnownLocation() return null

Я не понимаю, почему 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();
                    }
                }
            }
        }

Ответ 1

У меня была такая же проблема. Это произошло потому, что мое устройство не хранили последнее известное местоположение. Я просто перешел к Картам Google и определил свое местоположение с помощью GPS, затем значение было возвращено для getLastKnownLocation()

Ответ 2

Вы можете запросить обновления местоположения, как это

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

затем при первом обратном вызове в locationListener.onLocationChanged установите ваши координаты. Только не забудьте вызвать mLocationManager.removeUpdates(locationListener)

Ответ 3

Подписывая документацию, он возвращает null, если устройство не знает о последнем известном местоположении. Вероятно, GPS не может найти вас. Во всяком случае, это занимает около минуты. Поэтому старайтесь выходить на улицу под ясным небом, вдали от высоких зданий, и ждать, пока GPS не сможет найти вас.

Ответ 4

Я использовал этот метод для получения местоположения, я думаю, это поможет вам

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");
    }
}

Ответ 5

Когда вы используете GPS в качестве провайдера, тогда он дает ваш результат с 1 до 2 млн., поэтому вам нужно будет это проверить, когда вы остановите свое местоположение, а Network Provider предоставит вам немедленное местоположение при запросе. Таким образом, вы не получаете немедленного локального местоположения в провайдере GPS.

GPS принимает от 1 до 2 только в первый раз, а затем после того, как он предоставит вам местоположение по вызову...