Текущее местоположение Android возвращается null

Я использую LocationClient для получения текущего местоположения, и если это не удается, используйте LocationManager.

Иногда я не получаю текущее местоположение устройства. Если он получает местоположение устройства, то он продолжает получать его каждый раз, когда я пытаюсь, и, если он не может получить местоположение, и независимо от того, сколько раз я пытаюсь, он никогда не дает местоположение. Также в то же время, если я запускаю код на нескольких устройствах, он дает местоположение некоторых устройств, но не может получить доступ к остальным устройствам.

@Override
public void onConnected(Bundle connectionHint) {

    Location loc = locationClient.getLastLocation();
    Log.e(TAG, "location using client = " + loc.getLatitude() + ","
                + loc.getLongitude());

    // If location is not null
    if (loc != null && loc.getLatitude() != 0.0 && loc.getLongitude() != 0.0) {
        // code
    } else {
        // Use location manager to get location
        getCurrentLocationUsingLocationManager();
    }
}



private void getCurrentLocationUsingLocationManager() {
    // Get last known location
    Location location = locationManager
            .getLastKnownLocation(LocationManager.GPS_PROVIDER);

    // If last known location is recent then use it, otherwise request for
    // location update.
    if (location != null
            && location.getTime() > Calendar.getInstance()
                    .getTimeInMillis()
                    - THRESHOLD_ON_LAST_KNOWN_LOCATION_TIME * 1000)
    {

        // code

    } else
    {

        LocationListener locationListener = getLocationListener();

        // If Network provider is enabled, then start listening for location
        // updates
        if (locationManager
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER))
        {

            locationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER, 0, 0,
                    locationListener);

        }

        // If GPS provider is enabled, then start listening for location
        // updates
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
        {

            locationManager.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER, 0, 0, locationListener);

        }

        // If none of the location providers is enabled
        if (!locationManager
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER)
                && !locationManager
                        .isProviderEnabled(LocationManager.GPS_PROVIDER))
        {

            Log.d(TAG, "GPS and Network providers are disabled.");
        }
    }
}

// Initializes LocationListener to listen for location updates and return an
// instance of it.
private LocationListener getLocationListener()
{
    // Define a listener that responds to location updates
    LocationListener locationListener = new LocationListener()
    {
        @Override
        public void onLocationChanged(Location location)
        {

            // If location is not null and its accuracy requirement is
            // satisfied then,
            if (location != null
                    && location.getAccuracy() <= LOCATION_ACCURACY)
            {

                Log.d(TAG, "Location : " + location.getLatitude() + ", "
                        + location.getLongitude());

                locationManager.removeUpdates(this);
            }
        }

        @Override
        public void onStatusChanged(String provider, int status,
                Bundle extras)
        {

        }

        @Override
        public void onProviderEnabled(String provider)
        {

        }

        @Override
        public void onProviderDisabled(String provider)
        {

        }
    };

    return locationListener;
}

person Geek    schedule 19.03.2014    source источник
comment
связанные: stackoverflow.com/questions/6994904/   -  person petey    schedule 19.03.2014
comment
@petey В чем смысл предоставления ссылки на вопрос, где ответ на вопрос - это код, который у меня уже есть. Также у меня есть разрешение.   -  person Geek    schedule 19.03.2014